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