FSLIB.NETWORK 是什么?它是一个为HTTP协议设计的高度简便易用且极具功能性的类库。它的由来要追溯到12306订票助手.NET的诞生。在12306订票助手.NET诞生之初,我就有这么一个需求,需要一个用起来十分简单易用且灵活性和强健于一身的网络请求库。
为什么有这些要求呢?因为我懒,所以需要这个类库十分灵活简便易用,最好只要告诉它我有什么然后要什么,它就能给我弄回来。然而12306的种种掉链子谁都知道,所以我也希望这个库足够强健,至少不会因为库本身的因素导致程序崩掉。
所以这个库的存在是十分重要的。然而幸运的是,这个库完善到现在后,基本上符合我的要求。
提示:如果您在此网络库的使用过程中遇到任何问题,请在 问答社区(http://ask.fishlee.net/category...
木魚
8年前 (2016-05-05) 10967℃ 5评论
27喜欢
最近琐事缠身,烦得不行,拖了很久……
概述
2.0版本之所以放弃了1.x版本的序列,是因为变更比较大,存在不少破坏性变更。
详细变更列表
警告:列表中为红色的变更记录为破坏性变更,您可能需要调整现有的代码以匹配当前的库。
HttpClient增加新的Clear()函数,用于重置状态。此操作会清空所有Cookies以及上下文跟踪
请求流封装逻辑细节调整,对极个别情况下出现的流异常增加捕捉
请求数据封装类逻辑修正,现在支持直接将 HttpPostFile 类型作为表单数据上传
HttpContext请求发送流程微调,异步模式下所有代码都以异步模式启动
增加对图片的上传支持(默认保存为JPG)
增加UrlTokenIdentitier功能(默认启用),允许将请求数据标记在URL中
提交数据在GE...
木魚
8年前 (2016-04-05) 7881℃ 6评论
8喜欢
回来后一直在生病,这不,病好了,就有力气吐槽了。
0x1. 起因
之前我网站(*.fishlee.net)都是托管在一台猎豹名下的服务器的。由于准备离职,所以需要将项目分离,部分网站以及服务需要迁移出来。
迁移到的服务器是一台万网的VPS上,问朋友蹭过来的一台VPS。配置当然不可同日而语,不过还好,起码人家是台服务器 不过需要打个预防针的就是网站的服务后面可能会精简或有限制了,至少不是那么稳定高速。这是题外话。
然后首先迁移过来的是静态资源(static.fishlee.net; dynamic.fishlee.net)。
0x2. 发现
迁移过后两天,例行查阅服务器日志的时候,发现了很多奇奇怪怪的请求。
是的,你没看错,扩展名是 .xx 以及 .xxs。看了看具体的路径,我觉得 .x...
木魚
8年前 (2016-03-04) 13054℃ 11评论
5喜欢
0.概述
FSLib.Network 是订票助手.NET的一个副产物。开始在设计订票助手.NET的时候,我就在策划写一个比较易用的HTTP客户端库来完成底层的操作。由于.NET原生的HttpWebRequest比较复杂难用,而内置的WebClient先天不足。在这种种背景之下,我花了很长的时间来打磨这个网络库。虽然起名叫Network,但是目前专注于HTTP库。这个网络库在订票助手.NET中得到了广泛全面的使用,几乎所有对12306发出的请求都是由它发出的。在订票助手.NET中,最近四个月中,由它发出的请求过亿,其稳定性也是蛮有保证的嘛。
更多介绍和演示,参见 原创FSLib.Network库(目前专注于HTTP的高性能高易用性网络库)。
1.1.6.0变更详情(与1.5.6相比)
修正错...
木魚
9年前 (2015-12-13) 12807℃ 15评论
8喜欢
0. 由来
市面上已经有很多视频下载工具了,比如硕鼠,比如维棠。在大多数情况下,他们也能工作得很好。然而,有些视频可能它们不会照顾到,比如新浪微博的短视频,比如秒拍视频。一般而言,这些短视频似乎确实没有保存的必要。但我偏偏想做出这样一个下载工具了。目标很简单,在那些主流下载工具没有能照顾到的角落,用它来为我保存一些能让人愉悦的东西。
1. 使用说明
几乎没有什么可以说的,就是简单的工具。目前支持秒拍视频,支持新浪视频。支持新浪短链接。
点击新建任务,将所有地址一行一行粘贴进去就可以。重复的任务会自动跳过,已下载的任务会自动跳过。
任务可以暂停,可以继续,失败了可以重试。重试除了点工具栏外,右击菜单和双击也可以用。
下载完成的话,双击可以打开。
秒拍视频可以自动取标题。很可惜新浪微博视频还...
木魚
9年前 (2015-10-27) 10871℃ 7评论
12喜欢
更新综述
8.0.8是一个功能更新版本。本版本最大的变更应该是增强联系人管理功能。而这所有的功能变更,可用下图来表示。
下载信息
更多信息参考订票助手.NET主页。
...
木魚
9年前 (2015-08-21) 6493℃ 6评论
6喜欢
每天我都在烂尾和不烂尾间徘徊。每次我都想着累死累死累死,我这么彷徨这么无助这么凄凉,连路灯都用昏黄的灯光为我默泪,为什么我还要在这边继续着有人看或没人看的事,写能怎么样,断更又能怎么样。只是强迫症的独特天赋在鞭策着我,于是每次都会极不情愿地拿起键盘,强大的羞耻心在时刻地提醒着我,如果真的断更了,下一次上厕所你一定会忘记带纸,你就只能凄凉着等着有人路过大方地施舍给你一张草纸,因为你连人民币都没有,你从来不会在大号的时候带着钱包。说到这里,下次记得放一卷手纸在卫生间的角落里。。。
上一章写到已经成功获得了验证码并且输入。那么输入后能干嘛?当然先登录了
7.1 先完成一些辅助函数和登录界面
创建登录界面应该是极为简单的事情,就不多说了。我们这里设计个登录界面如下。
然后写上了俩调用函数。
...
木魚
9年前 (2015-08-18) 18338℃ 15评论
23喜欢
前言:这段时间太忙,这个系列几乎没抽出时间来写。现在来慢慢继续挤牙膏。关于FSLIB.NETWORK网络库或这个演示项目有任何问题的,请在问答社区(http://ask.fishlee.net/category-21)中反馈提问
6.1 验证码流程分析
我们照例打开Fiddler抓包,在跟踪登录和提交流程后,我们可以很容易看到相关的请求。我们先到登录12306的页面上看看样子。
看到了让人抓狂的图片验证码。其实我对这验证码还是好评的。让我们先来试一下验证码错误是什么情况。两行四列图片,我们先点击第一行第一张的左上角,和第二行第一张的左下角,也就是截图中标记的两个区域。这么做的原因是为了待会儿的提交测试做坐标映射(因为提交出去的信息不一定就是相对于图片本身的原点的)。也就是这样。
...
木魚
9年前 (2015-08-12) 9757℃ 3评论
17喜欢
在上次提交之后到现在开始本章之前,源码库做了一些修改,主要是修正了两个地方的错误,并完善了一下不是很关键的流程。为了简便起见,这里不做展开。变更的内容为:Session增加了状态变更的事件通知以及登录信息;主窗口退出按钮增加处理事件;登录和注销的状态切换绑定到工具栏的登录和注销按钮上;登录信息中增加了当前登录用户的真实名称。
5.1 查票流程
5.1.1 流程分析
其实查票是一个相对比较简单的流程。掏出Fiddler回去看抓包的结果。简单的浏览请求后,只要不是眼瞎应该都可以看到请求。。。
(这里为了方便,用的是Fiddler抓包。其实用浏览器的开发者工具抓包效果是一样的,某些方面可能比Fiddler还方便,比如看数据预览)
右侧很明显可以看到是我们有兴趣的数据,然后回过头看看...
木魚
9年前 (2015-06-10) 15822℃ 21评论
16喜欢
1.5 版变更
本版本主要变动如下。
新增单独的HtmlAgilityPack适配器,支持直接Create<HtmlDocument>请求(单独搜索 ifish 后安装包 network.fishlee.net_html.adapter );
修正当请求发生错误(40x)时会抛出NullReferenceException导致请求失败的BUG;
本版本无破坏性变更。
...
木魚
9年前 (2015-06-09) 7417℃ 6评论
3喜欢
咳咳……本来是打算上个周末弄出本章的,结果因为种种种种时间没安排开的关系,就给忽略了(其实是因为写搜资源的那个软件花了过多的时间……),所以现在赶紧来补上,免得太监了。
本章内容
本章内将会完成如下事情:
构造主窗体并将大致界面构造出来
将UI界面与当前订票的上下文关系关联起来
完成基本数据的准备和相关过程中的界面等待
4.1 构造大致界面
为了简便起见,这里我们约定使用比较简单的界面布局,暂时不添加复杂的功能选项界面。初步规划的界面如下图所示(这是个原型图,表以为我设计是多么的专业,其实我从来不用这玩意儿,这次拿出来耍耍只是为了装逼):
从原型图可以看出来,这是一个比较简单直接的订票界面,没有考虑到刷票等比较复杂的功能,也并没有设计什么多账户登录的功能。一是这样可以简化设计,比...
木魚
9年前 (2015-06-08) 11229℃ 10评论
11喜欢
3.1 本章前言
从本章开始,将会涉及到具体的开发过程。工欲善其事,必先利其器。话虽如此,但准备工具之前知己知彼还是比较重要的……
3.2 12306流程分析
这里我们从一个典型的用户订票流程来考虑并设计流程。
注意:这里同时已经设置好了Fiddler和过滤器以抓取所有请求,供后面使用。如果此时你还没有进行这样的操作,在这之后每一步可能都需要临时分析,会花费不少多余的时间,强烈建议你现在就抓取一个完整的流程记录。相关的内容请参考上一节。
首先用户进入了查票入口,选择日期和地点。这里以经典的北京–上海为例,时间选择的是7月20日,这里的信息不是关键的信息,可以根据你自己的需要来设置。
点击查询后,会跳转到查询页面,并显示查询结果。
这里假定我们要定G1次列车,点...
木魚
9年前 (2015-05-28) 6744℃ 7评论
9喜欢
2.1 前言
其实要做一个12306的软件版客户端,其核心奥义就是抓住重点扔掉花里胡哨的东东。抓住重点说的就是相关的API接口,花里胡哨的东西说的就是图片啊样式啊之类的东东,对于WEB来说它们是必不可少的,但是对于软件版来说这些则是累赘的东西。
由于一个WEB网站中占用体积大头的往往都是些静态的不会动的无生命物种,因此去掉这些东东既可以提高操作速度也可以减轻服务器的负载需求。虽然大型的网站都有CDN了,但是带宽也是要成本的是不是?虽然这成本和咱并没有什么关系。
既然要用软件去实现WEB接口并实现整个流程,那么在林林总总的HTTP请求中准确地找到相关的请求并正确的识别出请求内部的各个参数就很重要了。
2.2 请求跟踪
一般而言,识别请求是个经验活,而识别请求内容并判断响应内容则是个运气活了…...
木魚
9年前 (2015-05-22) 9932℃ 7评论
14喜欢
本项目是由木鱼发起的一个基于.NET4.5的12306订票客户端。项目使用C#语言,使用FSLib.Network项目作为网络层访问库,主要用于演示目的。
主要原因是因为很多同学希望能借由12306练手,以此打开通往网络编程的大门……选择12306不是没有原因的,因为其复杂多变,又有错综复杂的逻辑关系,又十分具有现实意义,嗯。
12306订票助手.NET的代码由于历史和功能的原因,其体系过于庞大,并不适合(且目前也不能)开放源码。因此重新单独启动这个简单的项目,希望能给予想学习网络编程的同学以帮助。
实现目标
本项目仅包含基本的12306功能实现:
登录
查询
提交订单
更详细进阶的功能将会在之后视情况是否加入。
技术概述
本项目出于演示&练习目的,所以将会使用较新的平台、工具以...
木魚
9年前 (2015-05-19) 8596℃ 4评论
20喜欢
1.4版变更
本版本主要变动如下。
创建支持创建为 JObject 对象;
新增自动检测BOM头的选项,默认开启;
增加 ExceptionStatus 属性;
ResponseFileContent 增加成功标记位
当使用代理服务器且需要验证时,提前设置验证信息以避免407响应;
修正针对单请求的UserAgent设置无效
其它细节调整
本版本暂无破坏性变更。
附议
本版本包含有部分空类,为预留之后开发使用,暂时可无视。
其它详细信息参见之前的相关文章。
...
木魚
9年前 (2015-05-08) 6186℃ 6评论
2喜欢
上一篇对FSLib.Network库进行了简单的介绍和演示。从本篇开始介绍相关的使用。
1.基本运行机制介绍
FSLib.Network.Http 命名空间下的类是本网络库中用于HTTP处理的相关类型集中存放的地方。由于类库是基于HttpWebRequest以及HttpWebResponse的,所以很多行为表现和逻辑和它们几乎保持一致。
在此基础之上,本类库进行了抽象和总结,并提炼出一整套流程和运行框架。以下分别介绍。
2.相关模型介绍
2.1 HttpClient
HttpClient是开始HTTP处理请求的工厂。它是用来维护、创建、跟踪HTTP请求的一个基本类。可以理解为它是一个容器,维护了所有的Cookies以及全局设置,然后通过它可以创建出不同的HTTP请求实例。
HttpClie...
木魚
9年前 (2015-01-19) 68678℃ 24评论
7喜欢
0.背景
开始在设计订票助手.NET的时候,我就在策划写一个比较易用的HTTP客户端库来完成底层的操作。由于.NET原生的HttpWebRequest比较复杂难用,而内置的WebClient先天不足。
.NET 4.5中新增了HttpClient,但可惜.NET4.0不支持XP,所以暂时只能放弃HttpClient了。在这种种背景之下,我花了很长的时间来打磨这个网络库。虽然起名叫Network,但是目前专注于HTTP库。
这个网络库在订票助手.NET中得到了广泛全面的使用,几乎所有对12306发出的请求都是由它发出的。在订票助手.NET中,最近四个月中,由它发出的请求过亿,其稳定性也是蛮有保证的嘛。
1.功能特点&运行需求
其实它是对HttpWebRequest/HttpWebRe...
木魚
9年前 (2015-01-18) 38504℃ 69评论
26喜欢