using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO; using System.Threading; namespace Gets { public class HttpHelper { #region 私有变量 private CookieContainer cc; private string contentType = "application/x-www-form-urlencoded"; private string accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*"; private string userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"; private Encoding encoding = Encoding.GetEncoding("utf-8"); private int delay = 3000; private int maxTry = 3; private int currentTry = 0; #endregion #region 属性 /// /// Cookie容器 /// public CookieContainer CookieContainer { get { return cc; } } /// /// 获取网页源码时使用的编码 /// /// public Encoding Encoding { get { return encoding; } set { encoding = value; } } public int NetworkDelay { get { return delay; } set { delay = value; } } public int MaxTry { get { return maxTry; } set { maxTry = value; } } #endregion #region 构造函数 /// /// Initializes a new instance of the class. /// public HttpHelper() { cc = new CookieContainer(); } /// /// Initializes a new instance of the class. /// /// The cc. public HttpHelper(CookieContainer cc) { this.cc = cc; } /// /// Initializes a new instance of the class. /// /// Type of the content. /// The accept. /// The user agent. public HttpHelper(string contentType, string accept, string userAgent) { this.contentType = contentType; this.accept = accept; this.userAgent = userAgent; } /// /// Initializes a new instance of the class. /// /// The cc. /// Type of the content. /// The accept. /// The user agent. public HttpHelper(CookieContainer cc, string contentType, string accept, string userAgent) { this.cc = cc; this.contentType = contentType; this.accept = accept; this.userAgent = userAgent; } #endregion #region 公共方法 /// /// 获取指定页面的HTML代码 /// /// 指定页面的路径 /// 回发的数据 /// 是否以post方式发送请求 /// Cookie集合 /// public string GetHtml(string url, string postData, bool isPost, CookieContainer cookieContainer) { if (string.IsNullOrEmpty(postData)) { return GetHtml(url, cookieContainer); } Thread.Sleep(delay); currentTry++; try { byte[] byteRequest = Encoding.Default.GetBytes(postData); HttpWebRequest httpWebRequest; httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); httpWebRequest.CookieContainer = cookieContainer; httpWebRequest.ContentType = contentType; httpWebRequest.Referer = url; httpWebRequest.Accept = accept; httpWebRequest.UserAgent = userAgent; httpWebRequest.Method = isPost ? "POST" : "GET"; httpWebRequest.ContentLength = byteRequest.Length; Stream stream = httpWebRequest.GetRequestStream(); stream.Write(byteRequest, 0, byteRequest.Length); stream.Close(); HttpWebResponse httpWebResponse; httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); Stream responseStream = httpWebResponse.GetResponseStream(); StreamReader streamReader = new StreamReader(responseStream, encoding); string html = streamReader.ReadToEnd(); streamReader.Close(); responseStream.Close(); currentTry = 0; return html; } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(DateTime.Now.ToString("HH:mm:ss ") + e.Message); Console.ForegroundColor = ConsoleColor.White; if (currentTry <= maxTry) { GetHtml(url, postData, isPost, cookieContainer); } currentTry = 0; return string.Empty; } } /// /// 获取指定页面的HTML代码 /// /// 指定页面的路径 /// Cookie集合 /// public string GetHtml(string url, CookieContainer cookieContainer) { Thread.Sleep(delay); currentTry++; try { HttpWebRequest httpWebRequest; httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); httpWebRequest.CookieContainer = cookieContainer; httpWebRequest.ContentType = contentType; httpWebRequest.Referer = url; httpWebRequest.Accept = accept; httpWebRequest.UserAgent = userAgent; httpWebRequest.Method = "GET"; HttpWebResponse httpWebResponse; httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); Stream responseStream = httpWebResponse.GetResponseStream(); StreamReader streamReader = new StreamReader(responseStream, encoding); string html = streamReader.ReadToEnd(); streamReader.Close(); responseStream.Close(); currentTry = 0; return html; } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(DateTime.Now.ToString("HH:mm:ss ") + e.Message); Console.ForegroundColor = ConsoleColor.White; if (currentTry <= maxTry) { GetHtml(url, cookieContainer); } currentTry = 0; return string.Empty; } } /// /// 获取指定页面的HTML代码 /// /// 指定页面的路径 /// public string GetHtml(string url) { return GetHtml(url, cc); } /// /// 获取指定页面的HTML代码 /// /// 指定页面的路径 /// 回发的数据 /// 是否以post方式发送请求 /// public string GetHtml(string url, string postData, bool isPost) { return GetHtml(url, postData, isPost, cc); } /// /// 获取指定页面的Stream /// /// 指定页面的路径 /// 回发的数据 /// 是否以post方式发送请求 /// Cookie集合 /// public Stream GetStream(string url, CookieContainer cookieContainer) { Thread.Sleep(delay); currentTry++; try { HttpWebRequest httpWebRequest; httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); httpWebRequest.CookieContainer = cookieContainer; httpWebRequest.ContentType = contentType; httpWebRequest.Referer = url; httpWebRequest.Accept = accept; httpWebRequest.UserAgent = userAgent; httpWebRequest.Method = "GET"; HttpWebResponse httpWebResponse; httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); Stream responseStream = httpWebResponse.GetResponseStream(); currentTry = 0; return responseStream; } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(DateTime.Now.ToString("HH:mm:ss ") + e.Message); Console.ForegroundColor = ConsoleColor.White; if (currentTry <= maxTry) { GetHtml(url, cookieContainer); } currentTry = 0; return null; } } #endregion } }