C#使用HttpWebRequest进行HTTP请求发送和接收的一些小结。(新增修复.NET4.0以下关于cookie的bug)
2012-12-20 17:20
417 查看
2014.11.29 新增HTTPS处理和常用的getMid函数
直接贴代码:
直接贴代码:
#region httpUtils private const string DefaultUserAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1"; private CookieContainer CC = new CookieContainer(); private void BugFix_CookieDomain(CookieContainer cookieContainer) { System.Type _ContainerType = typeof(CookieContainer); Hashtable table = (Hashtable)_ContainerType.InvokeMember("m_domainTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, cookieContainer, new object[] { }); ArrayList keys = new ArrayList(table.Keys); foreach (string keyObj in keys) { string key = (keyObj as string); if (key[0] == '.') { string newKey = key.Remove(0, 1); table[newKey] = table[keyObj]; } } } private String GetMid(String input, String s, String e) { int pos = input.IndexOf(s); if (pos == -1) { return ""; } pos += s.Length; int pos_end = 0; if (e == "") { pos_end = input.Length; } else { pos_end = input.IndexOf(e, pos); } if (pos_end == -1) { return ""; } return input.Substring(pos, pos_end - pos); } private String DoGet(String url) { String html = ""; StreamReader reader = null; HttpWebRequest webReqst = (HttpWebRequest)WebRequest.Create(url); webReqst.Method = "GET"; webReqst.UserAgent = DefaultUserAgent; webReqst.KeepAlive = true; webReqst.CookieContainer = CC; webReqst.Timeout = 30000; webReqst.ReadWriteTimeout = 30000; try { HttpWebResponse webResponse = (HttpWebResponse)webReqst.GetResponse(); BugFix_CookieDomain(CC); if (webResponse.StatusCode == HttpStatusCode.OK && webResponse.ContentLength < 1024 * 1024) { Stream stream = webResponse.GetResponseStream(); stream.ReadTimeout = 30000; if (webResponse.ContentEncoding == "gzip") { reader = new StreamReader(new GZipStream(stream, CompressionMode.Decompress), Encoding.Default); } else { reader = new StreamReader(stream, Encoding.Default); } html = reader.ReadToEnd(); } } catch { } return html; } private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; //总是接受 } private String DoPost(String url, String Content) { string html = ""; StreamReader reader = null; HttpWebRequest webReqst = null; //如果是发送HTTPS请求 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); webReqst = WebRequest.Create(url) as HttpWebRequest; webReqst.ProtocolVersion = HttpVersion.Version10; } else { webReqst = WebRequest.Create(url) as HttpWebRequest; } webReqst.Method = "POST"; webReqst.UserAgent = DefaultUserAgent; webReqst.ContentType = "application/x-www-form-urlencoded"; webReqst.ContentLength = Content.Length; webReqst.CookieContainer = CC; webReqst.Timeout = 30000; webReqst.ReadWriteTimeout = 30000; try { byte[] data = Encoding.Default.GetBytes(Content); Stream stream = webReqst.GetRequestStream(); stream.Write(data, 0, data.Length); HttpWebResponse webResponse = (HttpWebResponse)webReqst.GetResponse(); BugFix_CookieDomain(CC); if (webResponse.StatusCode == HttpStatusCode.OK && webResponse.ContentLength < 1024 * 1024) { stream = webResponse.GetResponseStream(); stream.ReadTimeout = 30000; if (webResponse.ContentEncoding == "gzip") { reader = new StreamReader(new GZipStream(stream, CompressionMode.Decompress), Encoding.Default); } else { reader = new StreamReader(stream, Encoding.Default); } html = reader.ReadToEnd(); } } catch { } return html; } #endregion
相关文章推荐
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
- [转载]使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理
- 使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理
- (微信API接口开发) 使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理
- C# 后台使用HttpWebRequest发送POST请求帮助类
- C# winform端 通过HttpWebRequest进行post和get请求,数据格式为json,后台java端接收,其中有关传输特殊字符(\t,\r,',\n,n)等处理
- 使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理
- 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
- 修复.NET中通过HttpWebRequest 中GET 方法丢失Cookie的bug
- C#实现通过HttpWebRequest发送POST请求实现网站自动登陆
- 使用firefox插件httperrequest,模拟发送及接收Json请求
- 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
- 使用HttpWebRequest和HttpWebResponse在后台进行文件的请求和响应
- 使用firefox插件httperrequest,模拟发送及接收Json请求
- HttpWebRequest模拟登陆,存储Cookie以便登录请求后使用
- [C#]使用HttpWebRequest请求远端服务器时如何加载SSL证书
- C#使用HttpWebRequest 进行get 和post提交
- 使用httperrequest,模拟发送及接收Json请求
- 使用HttpWebRequest发送自定义POST请求