public class RequestWeb { private readonly static int TIMEOUT = 15000; private CookieContainer _cookieCon = new CookieContainer(); private CredentialCache _credentials; /// <summary> /// 通过url请求数据 /// </summary> /// <param name="url">被请求页面的url</param> /// <param name="proxyServer">代理服务器</param> /// <returns>返回页面内容</returns> public string GetPageContent(string url, string proxyServer) { StringBuilder ret = new StringBuilder(""); HttpWebResponse rsp = null; try { Uri uri = new Uri(url); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); if (!string.IsNullOrEmpty(proxyServer)) { req.Proxy = new WebProxy(proxyServer); } req.CookieContainer = this._cookieCon; req.Headers.Add("Accept-Language: zh-cn"); req.AllowAutoRedirect = true; req.Timeout = TIMEOUT; if (this._credentials != null) { req.PreAuthenticate = true; req.Credentials = this._credentials; } rsp = (HttpWebResponse)req.GetResponse(); Stream rspStream = rsp.GetResponseStream(); StreamReader sr = new StreamReader(rspStream, System.Text.Encoding.Default); //获取数据 Char[] read = new Char[256]; int count = sr.Read(read, 0, 256); while (count > 0) { ret.Append(read, 0, count); count = sr.Read(read, 0, 256); } } catch (Exception e) { ret.Append(e.Message); } finally { if (rsp != null) { rsp.Close(); } } return ret.ToString(); } /// <summary> /// 通过url请求数据(Post方法) /// </summary> /// <param name="url">被请求页面的url</param> /// <param name="param">POST的内容</param> /// <param name="proxyServer">代理</param> /// <returns>返回页面内容</returns> public string GetPageContent(string url, string param, string proxyServer) { StringBuilder ret = new StringBuilder(""); HttpWebResponse rsp = null; try { Uri uri = new Uri(url); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); if (!string.IsNullOrEmpty(proxyServer)) { req.Proxy = new WebProxy(proxyServer); } req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; req.Headers.Add("Accept-Language: zh-cn"); req.CookieContainer = _cookieCon; req.Timeout = TIMEOUT; req.AllowAutoRedirect = true; if (_credentials != null) { req.PreAuthenticate = true; req.Credentials = _credentials; } //传入POST参数的分析 if (param != null) { string temp = EncodeParams(param, System.Text.Encoding.Default); byte[] bytes = Encoding.UTF8.GetBytes(temp); req.ContentLength = bytes.Length; Stream rspStream = req.GetRequestStream(); rspStream.Write(bytes, 0, bytes.Length); rspStream.Close(); } else { req.ContentLength = 0; } //取得请求后返回的的数据 rsp = (HttpWebResponse)(req.GetResponse()); Stream ReceiveStream = rsp.GetResponseStream(); StreamReader sr = new StreamReader(ReceiveStream, System.Text.Encoding.Default); Char[] read = new Char[256]; int count = sr.Read(read, 0, 256); while (count > 0) { ret.Append(read, 0, count); count = sr.Read(read, 0, 256); } } //catch (Exception e) //{ // string err = e.ToString(); //} finally { if (rsp != null) { rsp.Close(); } } return ret.ToString(); } /// <summary> /// 通过传入的url请求文件数据 /// </summary> /// <param name="url">图片的URL</param> /// <param name="ProxyServer">代理服务器</param> /// <returns>图片内容</returns> public byte[] GetFile(string url, string proxyServer) { WebResponse rsp = null; byte[] retBytes = null; try { Uri uri = new Uri(url); WebRequest req = WebRequest.Create(uri); rsp = req.GetResponse(); Stream stream = rsp.GetResponseStream(); if (!string.IsNullOrEmpty(proxyServer)) { req.Proxy = new WebProxy(proxyServer); } using (MemoryStream ms = new MemoryStream()) { int b; while ((b = stream.ReadByte()) != -1) { ms.WriteByte((byte)b); } retBytes = ms.ToArray(); } } catch (Exception ex) { retBytes = null; } finally { if (rsp != null) { rsp.Close(); } } return retBytes; } private string EncodeParams(string param, Encoding enc) { StringBuilder ret = new StringBuilder(); char[] reserved = { '?', '=', '&', '%', '+' }; if (param != null) { int i = 0, j; while (i < param.Length) { j = param.IndexOfAny(reserved, i); if (j == -1) { ret.Append(HttpUtility.UrlEncode(param.Substring(i, param.Length - i), enc)); break; } ret.Append(HttpUtility.UrlEncode(param.Substring(i, j - i), enc)); ret.Append(param.Substring(j, 1)); i = j + 1; } } return ret.ToString(); } } }