有关HTTP请求的辅助类
2016-03-03 11:09
501 查看
/// <summary> /// 有关HTTP请求的辅助类 /// </summary> public class HttpRequestHelper { private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; /// <summary> /// 创建GET方式的HTTP请求 /// </summary> /// <param name="url">请求的URL</param> /// <param name="timeout">请求的超时时间</param> /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param> /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param> /// <returns></returns> public static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent, CookieCollection cookies) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = "GET"; request.UserAgent = DefaultUserAgent; if (!string.IsNullOrEmpty(userAgent)) { request.UserAgent = userAgent; } if (timeout.HasValue) { request.Timeout = timeout.Value; } if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } return request.GetResponse() as HttpWebResponse; } public static string HttpGet(string url) { var result = CreateGetHttpResponse(url, 6000, null, null); Stream stream = result.GetResponseStream(); //获取响应的字符串流 StreamReader sr = new StreamReader(stream); //创建一个stream读取流 string html = sr.ReadToEnd(); //从头读到尾,放到字符串html李米 return html; } public static string HttpPost(string url, IDictionary<string, string> par) { var result = CreatePostHttpResponse(url, par, new UTF8Encoding()); Stream stream = result.GetResponseStream(); //获取响应的字符串流 StreamReader sr = new StreamReader(stream); //创建一个stream读取流 string html = sr.ReadToEnd(); //从头读到尾,放到字符串html李米 return html; } /// <summary> /// 创建POST方式的HTTP请求 /// </summary> /// <param name="url">请求的URL</param> /// <param name="parameters">随同请求POST的参数名称及参数值字典</param> /// <param name="timeout">请求的超时时间</param> /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param> /// <param name="requestEncoding">发送HTTP请求时所用的编码</param> /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param> /// <returns></returns> public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, Encoding requestEncoding ,int timeout = 2000, string userAgent = "", CookieCollection cookies = null) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } if (requestEncoding == null) { throw new ArgumentNullException("requestEncoding"); } HttpWebRequest request = null; //如果是发送HTTPS请求 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version10; } else { request = WebRequest.Create(url) as HttpWebRequest; } request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; if (!string.IsNullOrEmpty(userAgent)) { request.UserAgent = userAgent; } else { request.UserAgent = DefaultUserAgent; } if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } //如果需要POST数据 if (!(parameters == null || parameters.Count == 0)) { StringBuilder buffer = new StringBuilder(); int i = 0; foreach (string key in parameters.Keys) { if (i > 0) { buffer.AppendFormat("&{0}={1}", key, parameters[key]); } else { buffer.AppendFormat("{0}={1}", key, parameters[key]); } i++; } byte[] data = requestEncoding.GetBytes(buffer.ToString()); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } return request.GetResponse() as HttpWebResponse; } //public static string GetPtApi(string url, string parameters) //{ // if (string.IsNullOrEmpty(url)) // { // throw new ArgumentNullException("url"); // } // HttpWebRequest request = null; // //如果是发送HTTPS请求 // if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) // { // ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); // request = WebRequest.Create(url) as HttpWebRequest; // request.ProtocolVersion = HttpVersion.Version10; // } // else // { // request = WebRequest.Create(url) as HttpWebRequest; // } // request.Method = "POST"; // request.ContentType = "application/x-www-form-urlencoded"; // request.UserAgent = DefaultUserAgent; // request.Headers.Add("plat","3"); // //如果需要POST数据 // if (!(parameters.IsStringEmpty())) // { // byte[] data =Encoding.UTF8.GetBytes(parameters); // using (Stream stream = request.GetRequestStream()) // { // stream.Write(data, 0, data.Length); // } // } // Stream stream1 = request.GetResponse().GetResponseStream(); //获取响应的字符串流 // StreamReader sr = new StreamReader(stream1); //创建一个stream读取流 // string html = sr.ReadToEnd(); //从头读到尾,放到字符串html李米 // return html; //} //public static string GetPtApi<T>(string url, T parameters) //{ // if (string.IsNullOrEmpty(url)) // { // throw new ArgumentNullException("url"); // } // HttpWebRequest request = null; // //如果是发送HTTPS请求 // if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) // { // ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); // request = WebRequest.Create(url) as HttpWebRequest; // request.ProtocolVersion = HttpVersion.Version10; // } // else // { // request = WebRequest.Create(url) as HttpWebRequest; // } // request.Method = "POST"; // request.ContentType = "application/x-www-form-urlencoded"; // request.UserAgent = DefaultUserAgent; // request.Headers.Add("plat", "3"); // //如果需要POST数据 // if (parameters!=null) // { // var pro = typeof(T).GetProperties().OrderBy(c=>c.Name); // int i = 0; // StringBuilder data = new StringBuilder(); // string key = ""; // foreach (var m in pro) // { // if (m.Name.ToLower() == "key") // { // key = m.GetValue(parameters, null).ToString(); // continue; // } // if (i > 0) // { // data.AppendFormat("&{0}={1}", m.Name, m.GetValue(parameters, null)); // } // else // { // data.AppendFormat("{0}={1}", m.Name, m.GetValue(parameters, null)); // } // i++; // } // data.AppendFormat("&key={0}",key);//KEY放最后 // var sign= CP.Core.SecureHelper.GetMD5(data.ToString().ToUpper(), "UTF_8").ToUpper(); // data.AppendFormat("&sign=" + sign); // byte[] data1 = Encoding.UTF8.GetBytes(data.ToString()); // using (Stream stream = request.GetRequestStream()) // { // stream.Write(data1, 0, data1.Length); // } // } // Stream stream1 = request.GetResponse().GetResponseStream(); //获取响应的字符串流 // StreamReader sr = new StreamReader(stream1); //创建一个stream读取流 // string html = sr.ReadToEnd(); //从头读到尾,放到字符串html李米 // return html; //} private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; //总是接受 } }
相关文章推荐
- 找实习之计算机网络复习
- nginx -with-openssl 和 with-http-openssl区别
- Android网络通信库Volley简介
- 基于近邻用户协同过滤算法的音乐推荐系统
- bzoj3630 镜面通道 网络流
- IOS网络图片缓存详解
- 最近写的一些通过https request获取token的小工具
- Https协议简析及中间人攻击原理
- HTTP基本认证
- [转]HTTP详解(1)-工作原理
- 用xmlhttpRequest获取同域网页中文出现乱码解决方案
- 主机上的vsphere ha 代理无法访问其它主机的部分管理网络地址
- HTTP响应头和请求头信息对照表
- PF_RING数据捕获,tcpreplay使用
- 启动tomcat时报错:Exception in thread "http-bio-8080-exec-2" java.lang.OutOfMemoryError: PermGen space
- 自己对volley http模块的二次封装的使用
- 在计算机中创建网络共享盘的快捷方式
- python 免费http代理服务接口
- Linux网络编程
- 人工神经网络框架列表(neural networks library)