private static string doRequest(RequestDataBean requestDataBean) { if (!CheckTools.isUrl(requestDataBean.Url)) { throw new ArgumentException("URL is illegal!"); } Encoding encoding = Encoding.GetEncoding(requestDataBean.Charset); HttpWebRequest httpWebRequest = CreateWebRequest(requestDataBean, encoding); if (httpWebRequest == null) { return(null); } HttpWebResponse httpWebResponse = null; try { httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse; return(GetResponseBody(httpWebResponse, encoding)); } catch { return(null); } finally { if (httpWebRequest != null) { httpWebRequest.Abort(); } if (httpWebResponse != null) { httpWebResponse.Close(); } } }
private static HttpWebRequest CreateWebRequest(RequestDataBean requestDataBean, Encoding encoding) { try { //提升系统外联的最大并发web访问数 ServicePointManager.DefaultConnectionLimit = 1024; ServicePointManager.Expect100Continue = false; Uri uri = new Uri(requestDataBean.Url); StringBuilder sb = new StringBuilder(); string secheme = uri.Scheme; string host = sb.Append(uri.Host).Append(uri.IsDefaultPort ? "" : (":" + uri.Port)).ToString(); sb.Clear(); string origin = sb.Append(secheme).Append("://").Append(host).ToString(); sb.Clear(); HttpWebRequest httpWebRequest = WebRequest.Create(uri) as HttpWebRequest; httpWebRequest.Timeout = requestDataBean.Timeout; httpWebRequest.Host = host; string key, value; foreach (KeyValuePair <string, string> kv in requestDataBean.GetHeaders()) { key = kv.Key; value = kv.Value; if (CheckTools.isNull(key)) { continue; } if (CheckTools.isNull(value)) { continue; } if ("Accept".Equals(key)) { httpWebRequest.Accept = value; } else if ("Connection".Equals(key)) { if ("keep-alive".Equals(value)) { httpWebRequest.KeepAlive = true; } } else if ("Referer".Equals(key)) { if (CheckTools.isUrl(value)) { httpWebRequest.Referer = value; } } else if ("User-Agent".Equals(key)) { httpWebRequest.UserAgent = value; } else { httpWebRequest.Headers.Set(key, value); } } string headerReferer = requestDataBean.GetHeader("Referer"); if (!CheckTools.isUrl(headerReferer)) { headerReferer = sb.Append(origin).Append("/").ToString(); sb.Clear(); httpWebRequest.Referer = headerReferer; } string headerOrigin = requestDataBean.GetHeader("Origin"); if (!CheckTools.isUrl(headerOrigin)) { httpWebRequest.Headers.Set("Origin", origin); } if (requestDataBean.Method == 1) { httpWebRequest.Method = "POST"; httpWebRequest.ContentType = "application/x-www-form-urlencoded"; } else { httpWebRequest.Method = "GET"; } CookieCollection cookies = requestDataBean.Cookies; if (cookies != null && cookies.Count > 0) { if (httpWebRequest.CookieContainer == null) { httpWebRequest.CookieContainer = new CookieContainer(); } foreach (Cookie cookie in cookies) { httpWebRequest.CookieContainer.Add(cookie); } } if (CheckTools.isNull(requestDataBean.Charset)) { requestDataBean.Charset = "utf-8"; } string postData = null; if (requestDataBean.Parameters != null) { foreach (KeyValuePair <string, string> kv in requestDataBean.Parameters) { key = kv.Key; value = kv.Value; if (CheckTools.isNull(key)) { continue; } if (CheckTools.isNull(value)) { continue; } sb.Append("&").Append(key).Append("=").Append(value); } if (sb.Length > 0) { sb.Remove(0, 1); postData = sb.ToString(); sb.Clear(); } } if (postData != null && postData.Length > 0) { byte[] bytes = encoding.GetBytes(postData); int length = bytes.Length; httpWebRequest.ContentLength = length; using (Stream requestStream = httpWebRequest.GetRequestStream()) { try { requestStream.Write(bytes, 0, length); requestStream.Flush(); } finally { requestStream.Close(); } } } return(httpWebRequest); } catch (Exception e) { Console.WriteLine(e.Message); return(null); } }