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 }