HttpWebRequest提高效率之连接数,代理,自动跳转,gzip请求等设置问题
- 先设置4个:
- [csharp]
- webrequest.ServicePoint.Expect100Continue = false;
- //是否使用 Nagle 不使用 提高效率
- webrequest.ServicePoint.UseNagleAlgorithm = false;
- //最大连接数
- webrequest.ServicePoint.ConnectionLimit = 65500;
- //数据是否缓冲 false 提高效率
- webrequest.AllowWriteStreamBuffering = false;
- 代理的使用:我用的代理都是不要账号和密码的,因为要不是免费的,要是是我们自己的,对来访IP 有限制
- [csharp]
- if (proxy!=null)
- {
- model.proxy = proxy;
- WebProxy myProxy = new WebProxy(proxy.ProxyInfo, false);
- myProxy.Credentials = new NetworkCredential("", "");
- webrequest.Proxy = myProxy;
- }
- else
- {
- webrequest.Proxy = GlobalProxySelection.GetEmptyWebProxy();
- }
- webrequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
- 带上gzip,如果对方支持gzip,流量上可以节省五分之四,原来250KB,用gzip压缩有 大概在50KB,减少带宽压力,增加速度
- 值得注意的是,如果是gzip,返回值必须要gzip解压的。
- [csharp]
- if (response.ContentEncoding.ToLower().Contains("gzip"))
- {
- using (GZipStream stream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress))
- {
- using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
- {
- model.html = reader.ReadToEnd();
- }
- }
- }
- 还有一点:gzip解压的时候回耗费CPU,所以这个需要注意下
- 附完成方法
- [csharp]
- /// <summary>
- /// Get 方式 获取数据
- /// </summary>
- /// <param name="webUrl"></param>
- /// <returns></returns>
- public Model.WebRequestReturnModel WebRequestGetHtmlByGet(string webUrl, CookieContainer cookieContainer, Encoding encoding, string refer,Model.Proxy proxy)
- {
- Model.WebRequestReturnModel model = new Model.WebRequestReturnModel();
- HttpWebRequest webrequest = null;
- try
- {
- webrequest = WebRequest.Create(webUrl) as HttpWebRequest;
- webrequest.ServicePoint.Expect100Continue = false;
- webrequest.ServicePoint.UseNagleAlgorithm = false;
- webrequest.ServicePoint.ConnectionLimit = 65500;
- webrequest.AllowWriteStreamBuffering = false;
- if (proxy!=null)
- {
- model.proxy = proxy;
- WebProxy myProxy = new WebProxy(proxy.ProxyInfo, false);
- myProxy.Credentials = new NetworkCredential("", "");
- webrequest.Proxy = myProxy;
- }
- else
- {
- webrequest.Proxy = GlobalProxySelection.GetEmptyWebProxy();
- }
- //设置其他的herader
- webrequest =WebRequestSetHeaders(webrequest);
- if (!String.IsNullOrEmpty(refer))
- {
- webrequest.Referer = refer;
- }
- else
- {
- webrequest.Referer = webUrl;
- }
- webrequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
- webrequest.CookieContainer = cookieContainer;
- webrequest.Timeout = 5000;
- webrequest.UserAgent = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
- webrequest.Accept = "*/*";
- webrequest.KeepAlive = true;
- webrequest.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5");
- using (HttpWebResponse response = (HttpWebResponse)webrequest.GetResponse())
- {
- if (response.ContentEncoding.ToLower().Contains("gzip"))
- {
- using (GZipStream stream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress))
- {
- using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
- {
- model.html = reader.ReadToEnd();
- }
- }
- }
- else if (response.ContentEncoding.ToLower().Contains("deflate"))
- {
- using (DeflateStream stream = new DeflateStream(response.GetResponseStream(), CompressionMode.Decompress))
- {
- using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
- {
- model.html = reader.ReadToEnd();
- }
- }
- }
- else
- {
- using (Stream stream = response.GetResponseStream())
- {
- using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
- {
- model.html = reader.ReadToEnd();
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- model.exception = ex;
- model.html = string.Empty;
- }
- model.cookieContainer = cookieContainer;
- return model;
- }
HttpWebRequest提高效率之连接数,代理,自动跳转,gzip请求等设置问题的更多相关文章
- nginx证书制作以及配置https并设置访问http自动跳转https(反向代理转发jboss)
nginx证书制作以及配置https并设置访问http自动跳转https 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖 ...
- 企业IT管理员IE11升级指南【15】—— 代理自动配置脚本
企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...
- 利用mock提高效率
利用mock提高效率 谈到mock,就不得不讲前后端分离.理想情况下前后端不分离,由全栈的人以product和infrastructure的维度进行开发,效率是最高的.近些年来业务的复杂度越来越高,真 ...
- 分享两个提高效率的AndroidStudio小技巧
这次分享两个 Android Studio 的小技巧,能够有效提高效率和减少犯错,尤其是在团队协作开发中. Getter 模板修改--自动处理 null 判断 格式化代码自动整理方法位置--广度 or ...
- grunt配置太复杂?发布一个前端构建工具,简单高效,自动跳过未更新的文件
做前端项目,如果没有一个自动化构建工具,手动处理那简直就是坑爹O(∩_∩)O.于是上网了解了下,grunt用的人不少,功能也挺强大.看了一下grunt的配置(包括gulp),感觉稍显复杂.当时项目结构 ...
- 提高效率的Matlab使用方式
1.花一点时间学习一些提高效率的技巧永远是值得的: 2.总结和记录永远是必要的. Command窗口: Editor窗口: 1.Tab自动补全
- paip.提高效率---集合的存取括号方式 uapi java python php js 的实现比较
paip.提高效率---集合的存取括号方式 uapi java python php js 的实现比较 ##java ----------- 在JDK1.7中,摒弃了Java集合接口的实现类,如:Ar ...
- http自动跳转https小记
因近期跌代更新ios/android后,由于担心ios https从17年起限制的问题,故目前我们将http更改为https,但既然支持https,故想将服务器直接更新为https,将原http请求自 ...
- nginx二级域名配置自动跳转到一级域名
nginx二级域名配置自动跳转到一级域名 rewrite配置内容: if ($http_host !~ "^www.aaa.com$") { rewrite ^(.*) http: ...
随机推荐
- Web Services之SOAP学习
Web Services之SOAP [toc] 什么是SOAP SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一 ...
- Oracle删除多张表
项目中遇到要删除多张表,发现不能同时删除,可以先查询出SQL语句,然后批量执行 1.查询出SQL语句: select 'drop table '||table_name || ';' from use ...
- wampserver修改mysql密码后phpmyadmin登陆错误处理方法
首先针对wampserver这个软件来说,是很方面的! 在进行使用时都会涉及到关于mysql数据管理系统的相关密码的修改,这个当然修改是很简单,当时没有想那么多,想为自己的mysql添加一个密码,方式 ...
- VC++ Bresenham画线实例
附带百度链接:http://wenku.baidu.com/link?url=GP4uDkoyulgNxQy5djBBi-JB5BCrMWW6svMDhSfmzi_Qi1s6DhwJiCPHdMI2o ...
- NUnit使用详解(二)
转载:http://hi.baidu.com/grayworm/item/39aa11c5d9375d56bdef6990 五:常用断言 在NUnit中,断言是单元测试的核心.NUnit提供了一组丰富 ...
- 如何在eclipse使用StaggeredGridView
概述 现在的开发工具基本都用AndroidStudio了.网上的开源框架也是.比如做瀑布式UI的StaggeredGridView,还有导航页的PagerSlidingTabStrip等. 那么电脑 ...
- 安装完oracle重新启动后报ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务(重启前正常)
安装完oracle重新启动后报ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务(重启前正常) 刚安装完后用plSql登录正常. 在dos命令行下 输入 sqlplus 用户 ...
- IAP (In-App Purchase)中文文档
内容转自:http://yarin.blog.51cto.com/1130898/549141 一.In App Purchase概览 Store Kit代表App和App Store之间进行通信.程 ...
- 动态加载js、css 代码
一.原生js: /** * 加载js和css文件 * @param jsonData.path 前缀路径 * @param jsonData.url 需要加载的js路径或css路径 * @param ...
- Fibonacci数列的java实现
关于Fibonacci应该都比较熟悉,0,1,1,2,3..... 基本公式为f(n) = f(n-1) + f(n-2); f(0) = 0; f(1) =1; 方法1:可以运用迭代的方法实现: p ...