C#模拟Http与Https请求框架实例
1 using System.Text; 2 using System.Net; 3 using System.IO; 4 using System.Text.RegularExpressions; 5 using System.Security.Cryptography.X509Certificates; 6 using System.Net.Security; 7 namespace WebRequestTest 8 { 9 /// <summary> 10 /// 动态类,每个实例使用单独session 11 /// </summary> 12 public class HttpHelperNew 13 { 14 public CookieContainer cookie = new CookieContainer(); 15 /// <summary> 16 /// post请求返回html 17 /// </summary> 18 /// <param name="Url"></param> 19 /// <param name="postDataStr"></param> 20 /// <returns></returns> 21 public string HttpPost(string Url, string postDataStr) 22 { 23 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); 24 //request.AllowAutoRedirect = false; //禁止自动重定向 25 request.Method = "POST"; 26 request.ContentType = "application/x-www-form-urlencoded"; 27 request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr); 28 request.CookieContainer = cookie; //cookie信息由CookieContainer自行维护 29 Stream myRequestStream = request.GetRequestStream(); 30 StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); 31 myStreamWriter.Write(postDataStr); 32 myStreamWriter.Close(); 33 HttpWebResponse response = null; 34 try 35 { 36 this.SetCertificatePolicy(); 37 response = (HttpWebResponse)request.GetResponse(); 38 } 39 catch (System.Exception ex) 40 { 41 } 42 //获取重定向地址 43 //string url1 = response.Headers["Location"]; 44 if (response !=null) 45 { 46 Stream myResponseStream = response.GetResponseStream(); 47 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); 48 string retString = myStreamReader.ReadToEnd(); 49 myStreamReader.Close(); 50 myResponseStream.Close(); 51 return retString; 52 } 53 else 54 { 55 return "error"; //post请求返回为空 56 } 57 } 58 /// <summary> 59 /// get请求获取返回的html 60 /// </summary> 61 /// <param name="Url"></param> 62 /// <param name="postDataStr"></param> 63 /// <returns></returns> 64 public string HttpGet(string Url, string Querydata) 65 { 66 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (Querydata == "" ? "" : "?") + Querydata); 67 request.Method = "GET"; 68 request.ContentType = "text/html;charset=UTF-8"; 69 request.CookieContainer = cookie; 70 this.SetCertificatePolicy(); 71 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 72 // response.Cookies = cookie.GetCookies(response.ResponseUri); 73 Stream myResponseStream = response.GetResponseStream(); 74 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); 75 string retString = myStreamReader.ReadToEnd(); 76 myStreamReader.Close(); 77 myResponseStream.Close(); 78 return retString; 79 } 80 /// <summary> 81 /// 获得响应中的图像 82 /// </summary> 83 /// <param name="url"></param> 84 /// <returns></returns> 85 public Stream GetResponseImage(string url) 86 { 87 Stream resst = null; 88 try 89 { 90 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 91 req.KeepAlive = true; 92 req.Method = "GET"; 93 req.AllowAutoRedirect = true; 94 req.CookieContainer = cookie; 95 req.ContentType = "application/x-www-form-urlencoded"; 96 req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 97 req.Timeout = 50000; 98 Encoding myEncoding = Encoding.GetEncoding("UTF-8"); 99 this.SetCertificatePolicy(); 100 HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 101 resst = res.GetResponseStream(); 102 return resst; 103 } 104 catch 105 { 106 return null; 107 } 108 } 109 /// <summary> 110 /// 正则获取匹配的第一个值 111 /// </summary> 112 /// <param name="html"></param> 113 /// <param name="pattern"></param> 114 /// <returns></returns> 115 public string getStringByRegex(string html,string pattern) 116 { 117 Regex re = new Regex(pattern, RegexOptions.IgnoreCase); 118 MatchCollection matchs = re.Matches(html); 119 if (matchs.Count > 0) 120 { 121 return matchs[0].Groups[1].Value; 122 } 123 else 124 return ""; 125 } 126 /// <summary> 127 /// 正则验证返回的response是否正确 128 /// </summary> 129 /// <param name="html"></param> 130 /// <param name="pattern"></param> 131 /// <returns></returns> 132 public bool verifyResponseHtml(string html ,string pattern) 133 { 134 Regex re = new Regex(pattern); 135 return re.IsMatch(html); 136 } 137 //注册证书验证回调事件,在请求之前注册 138 private void SetCertificatePolicy() 139 { 140 ServicePointManager.ServerCertificateValidationCallback 141 += RemoteCertificateValidate; 142 } 143 /// <summary> 144 /// 远程证书验证,固定返回true 145 /// </summary> 146 private static bool RemoteCertificateValidate(object sender, X509Certificate cert, 147 X509Chain chain, SslPolicyErrors error) 148 { 149 return true; 150 } 151 } 152 }