首页 > 代码库 > ahjesus HttpQuery
ahjesus HttpQuery
1 /// <summary> 2 /// 有关HTTP请求的辅助类 3 /// </summary> 4 public class HttpQuery 5 { 6 private static readonly string DefaultUserAgent = 7 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; 8 9 public static void Get(string url, object data, Action<string> callback) 10 { 11 IDictionary<string, string> parameters = Getparameters(data); 12 13 if (!(parameters == null || parameters.Count == 0)) 14 { 15 url += "?"; 16 foreach (var item in parameters) 17 { 18 url += item.Key + "=" + item.Value + "&"; 19 } 20 } 21 CreateGetHttpResponse(url, null, null, null, callback); 22 } 23 24 public static void Post(string url, object data, Action<string> callback) 25 { 26 IDictionary<string, string> parameters = Getparameters(data); 27 28 CreatePostHttpResponse(url, parameters, null, null, Encoding.UTF8, null, callback); 29 } 30 31 public static void Post(string url, string data, Action<string> callback) 32 { 33 CreatePostHttpResponse(url, data, null, null, Encoding.UTF8, null, callback); 34 } 35 36 private static IDictionary<string, string> Getparameters(object data) 37 { 38 if (data =http://www.mamicode.com/= null) 39 { 40 return new Dictionary<string, string>(); 41 } 42 IDictionary<string, string> parameters = new Dictionary<string, string>(); 43 44 Type type = data.GetType(); 45 PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); 46 foreach (PropertyInfo p in props) 47 { 48 parameters.Add(p.Name, p.GetValue(data).ToString()); 49 } 50 51 return parameters; 52 } 53 54 /// <summary> 55 /// 创建GET方式的HTTP请求 56 /// </summary> 57 /// <param name="url">请求的URL</param> 58 /// <param name="timeout">请求的超时时间</param> 59 /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param> 60 /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param> 61 /// <returns></returns> 62 private static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent, 63 CookieCollection cookies, Action<string> callback, string encoding = "utf-8") 64 { 65 if (string.IsNullOrEmpty(url)) 66 { 67 return null; 68 //throw new ArgumentNullException("url"); 69 } 70 try 71 { 72 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 73 request.Method = "GET"; 74 request.UserAgent = DefaultUserAgent; 75 if (!string.IsNullOrEmpty(userAgent)) 76 { 77 request.UserAgent = userAgent; 78 } 79 if (timeout.HasValue) 80 { 81 request.Timeout = timeout.Value; 82 } 83 if (cookies != null) 84 { 85 request.CookieContainer = new CookieContainer(); 86 request.CookieContainer.Add(cookies); 87 } 88 89 HttpWebResponse httpWebResponse = request.GetResponse() as HttpWebResponse; 90 91 StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream(), 92 System.Text.Encoding.GetEncoding(encoding)); 93 94 string html = ""; 95 //获取请求到的数据 96 html = reader.ReadToEnd(); 97 //关闭 98 httpWebResponse.Close(); 99 reader.Close();100 101 Regex regex = new Regex("charset=(?<code>\\w+)\"");102 Match match = regex.Match(html);103 string code = match.Groups["code"].Value;104 if (!string.IsNullOrWhiteSpace(code) && code.ToLower() != encoding.ToLower())105 {106 return CreateGetHttpResponse(url, timeout, userAgent, cookies, callback, code);107 }108 else109 {110 callback(html);111 return httpWebResponse;112 }113 }114 catch115 {116 callback(null);117 }118 return null;119 }120 121 /// <summary> 122 /// 创建POST方式的HTTP请求 123 /// </summary> 124 /// <param name="url">请求的URL</param> 125 /// <param name="parameters">随同请求POST的参数名称及参数值字典</param> 126 /// <param name="timeout">请求的超时时间</param> 127 /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param> 128 /// <param name="requestEncoding">发送HTTP请求时所用的编码</param> 129 /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param> 130 /// <returns></returns> 131 private static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters,132 int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies, Action<string> callback)133 {134 if (string.IsNullOrEmpty(url))135 {136 throw new ArgumentNullException("url");137 }138 if (requestEncoding == null)139 {140 throw new ArgumentNullException("requestEncoding");141 }142 HttpWebRequest request = null;143 try144 {145 //如果是发送HTTPS请求 146 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))147 {148 ServicePointManager.ServerCertificateValidationCallback =149 new RemoteCertificateValidationCallback(CheckValidationResult);150 request = WebRequest.Create(url) as HttpWebRequest;151 request.ProtocolVersion = HttpVersion.Version10;152 }153 else154 {155 request = WebRequest.Create(url) as HttpWebRequest;156 }157 request.Method = "POST";158 request.ContentType = "application/x-www-form-urlencoded";159 160 if (!string.IsNullOrEmpty(userAgent))161 {162 request.UserAgent = userAgent;163 }164 else165 {166 request.UserAgent = DefaultUserAgent;167 }168 169 if (timeout.HasValue)170 {171 request.Timeout = timeout.Value;172 }173 if (cookies != null)174 {175 request.CookieContainer = new CookieContainer();176 request.CookieContainer.Add(cookies);177 }178 //如果需要POST数据 179 if (!(parameters == null || parameters.Count == 0))180 {181 StringBuilder buffer = new StringBuilder();182 int i = 0;183 foreach (string key in parameters.Keys)184 {185 if (i > 0)186 {187 buffer.AppendFormat("&{0}={1}", key, parameters[key]);188 }189 else190 {191 buffer.AppendFormat("{0}={1}", key, parameters[key]);192 }193 i++;194 }195 byte[] data =http://www.mamicode.com/ requestEncoding.GetBytes(buffer.ToString());196 using (Stream stream = request.GetRequestStream())197 {198 stream.Write(data, 0, data.Length);199 }200 }201 202 HttpWebResponse httpWebResponse = request.GetResponse() as HttpWebResponse;203 204 StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream(),205 System.Text.Encoding.GetEncoding("utf-8"));206 207 string html = "";208 //获取请求到的数据209 html = reader.ReadToEnd();210 211 //关闭212 httpWebResponse.Close();213 reader.Close();214 215 callback(html);216 217 return httpWebResponse;218 }219 catch220 {221 callback(null);222 }223 return null;224 }225 226 private static HttpWebResponse CreatePostHttpResponse(string url, string parameters, int? timeout,227 string userAgent, Encoding requestEncoding, CookieCollection cookies, Action<string> callback)228 {229 if (string.IsNullOrEmpty(url))230 {231 return null;232 //throw new ArgumentNullException("url");233 }234 if (requestEncoding == null)235 {236 throw new ArgumentNullException("requestEncoding");237 }238 HttpWebRequest request = null;239 try240 {241 //如果是发送HTTPS请求 242 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))243 {244 ServicePointManager.ServerCertificateValidationCallback =245 new RemoteCertificateValidationCallback(CheckValidationResult);246 request = WebRequest.Create(url) as HttpWebRequest;247 request.ProtocolVersion = HttpVersion.Version10;248 }249 else250 {251 request = WebRequest.Create(url) as HttpWebRequest;252 }253 request.Method = "POST";254 request.ContentType = "application/x-www-form-urlencoded";255 256 if (!string.IsNullOrEmpty(userAgent))257 {258 request.UserAgent = userAgent;259 }260 else261 {262 request.UserAgent = DefaultUserAgent;263 }264 265 if (timeout.HasValue)266 {267 request.Timeout = timeout.Value;268 }269 if (cookies != null)270 {271 request.CookieContainer = new CookieContainer();272 request.CookieContainer.Add(cookies);273 }274 //如果需要POST数据 275 if (!string.IsNullOrEmpty(parameters))276 {277 using (var streamWriter = new StreamWriter(request.GetRequestStream()))278 {279 streamWriter.Write(parameters);280 streamWriter.Flush();281 }282 }283 284 HttpWebResponse httpWebResponse = request.GetResponse() as HttpWebResponse;285 286 StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream(),287 System.Text.Encoding.GetEncoding("utf-8"));288 289 string html = "";290 //获取请求到的数据291 html = reader.ReadToEnd();292 293 //关闭294 httpWebResponse.Close();295 reader.Close();296 297 callback(html);298 299 return httpWebResponse;300 }301 catch302 {303 callback(null);304 }305 return null;306 }307 308 private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain,309 SslPolicyErrors errors)310 {311 return true; //总是接受 312 }313 314 }
使用方法
HttpQuery.Post(url, new { key = key, xmlCount = xmlCount }, (msg) => { });
ahjesus HttpQuery
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。