0.概述
FSLib.Network 是订票助手.NET的一个副产物。开始在设计订票助手.NET的时候,我就在策划写一个比较易用的HTTP客户端库来完成底层的操作。由于.NET原生的HttpWebRequest比较复杂难用,而内置的WebClient先天不足。在这种种背景之下,我花了很长的时间来打磨这个网络库。虽然起名叫Network,但是目前专注于HTTP库。这个网络库在订票助手.NET中得到了广泛全面的使用,几乎所有对12306发出的请求都是由它发出的。在订票助手.NET中,最近四个月中,由它发出的请求过亿,其稳定性也是蛮有保证的嘛。
更多介绍和演示,参见 原创FSLib.Network库(目前专注于HTTP的高性能高易用性网络库)。
1.1.6.0变更详情(与1.5.6相比)
- 修正错误的JSON.NET库依赖版本号
- 上传和下载支持性能计数(平均速度/当前速度/预计剩余时间/已用时间)
- 请求头原生支持 Origin
- 修正当上传数据无法计算长度时抛出异常的BUG(改为自动启用缓冲)
- 文件下载模式支持使用自定义流
- 修正异步模式下,进度报告错误的BUG
- 调整了部分的Cookies默认设置(如容量等)
- 支持无CookiesContainer模式
- 默认将300以上请求识别为文本模式
- 修正特定情况下对Cookeis处理模式的设置未能起效的bug
- 修正特定的URI会导致Refer报错的BUG
- 修正匿名类型中HttpPostFile文件上传的识别错误
- 一堆辅助函数,Fluent API设置参数
- JSON序列化默认使用自动Type处理
注意:本版本包含破坏性变更。HttpClient的两个便捷函数(
CreateGet
和CreatePost
)已改名,现在分别为 Get
和 Post
。2. 上传下载性能计数(速度)
这个功能是在做短视频下载工具的时候要用的,所以引入了。为了性能考虑,默认是不计算速度的,如果需要计算速度的话,可以在发送请求前手动设置记录速度。
可以使用HttpContext
的AutoStartSpeedMonitor
属性来自动开始计算。
var client = new HttpClient(); var ctx = client.GetData("一个网址..."); ctx.AutoStartSpeedMonitor = true; ctx.Send();
或者可以使用新增的Fluent API来设置。
var client = new HttpClient(); var ctx = client.GetData("一个网址...").WithSpeedMeter().Send();
这么设置后,相关是速度和时间信息将会在HttpContext
的Performance
属性中体现。参考下面的演示程序:
var client = new HttpClient(); var ctx = client.Create<ResponseFileContent>(HttpMethod.Get, "http://dldir1.qq.com/qqfile/qq/QQ7.9/16638/QQ7.9.exe", saveToFile: @"G:\QQ.exe" ); //setup a timer to display var timer = new System.Timers.Timer(1000); timer.Elapsed += (s, e) => { var perf = ctx.Performance; if (perf == null) return; Console.WriteLine( "{0}> 已下载大小:{1}, 总大小:{2}, 已用下载时间 {3}, 当前下载速度 {4}, 平均下载速度 {5}, 预计剩余时间 {6}", DateTime.Now.ToString("HH:mm:ss"), perf.ResponseLengthProcessed.ToSizeDescription(), perf.ResponseLength.ToSizeDescription(), perf.ElapsedTime?.ToFriendlyDisplay(), perf.InstantDownloadSpeed?.ToSizeDescription(), perf.AverageDownloadSpeed?.ToSizeDescription(), perf.DownloadResetTime?.ToFriendlyDisplay()); }; Console.WriteLine("开始下载...."); timer.Start(); ctx.WithSpeedMeter().Send(); timer.Stop(); Console.WriteLine("下载完成,状态=" + ctx.IsValid() + ",耗时=" + ctx.Performance.ElapsedTime?.ToFriendlyDisplay());
运行结果如下图所示。
3. 更多信息
更多信息和下载&安装,请参见主页。
官网主页
http://ask.fishlee.net/category-21 里没办法提问啊
http://ask.fishlee.net/category-21已经找到提问的地方了
请问解决了webclient中超时卡死app的问题了吗
超时卡死应该用异步来解决。
我的目的是:从C# Form通过webclienta或者httpclient发送请求到application server,获取数据后再进入后期处理。如果异步,会打乱获取数据的顺序。所以期望:如果请求超时,则重新请求;多次请求仍然获取不了数据,则提示用户退出系统,重新运行。如果网络没问题,重新运行肯定会成功获取数据。
你这应该用异步。
为什么上传文件总是在服务器接收不到了?
var url = System.Configuration.ConfigurationManager.AppSettings["server"];
url += "/client/upload_file.aspx";
var client = new HttpClient();
string v_filepath = textBox1.Text;
var context = client.Create(HttpMethod.Post, url, data: new { addname = "ahw", username = "admin", file = new HttpPostFile("file", v_filepath) });
context.Send();
请在这里提问:http://ask.fishlee.net/category-21
源码呢?
怎么设置keep-alive啊
太好了,有更新。
支持我鱼大大
支持鱼大
我的工具可以用这个更新了吼吼
必须支持。要更新的名字哎