日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理...

發布時間:2024/4/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://blog.csdn.net/cdefg198/article/details/8315438

萬能框架:http://www.sufeinet.com/forum.php?mod=viewthread&tid=2002?

?

<span style="font-family:Microsoft YaHei;">/// <summary> /// 類說明:HttpHelps類,用來實現Http訪問,Post或者Get方式的,直接訪問,帶Cookie的,帶證書的等方式,可以設置代理 /// 編碼日期:2011-09-20 /// 編 碼 人:蘇飛 /// 聯系方式:361983679 /// 更新網址:http://www.cckan.net/thread-3-1-1.html /// 修改日期:2012-12-09 /// </summary>using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO; using System.Text.RegularExpressions; using System.IO.Compression; using System.Security.Cryptography.X509Certificates; using System.Net.Security;namespace DotNet.Utilities {/// <summary>/// Http連接操作幫助類 /// <example>/// 下面是個例子大家可以看一下/// /// HttpHelper http = new HttpHelper();/// HttpItem item = new HttpItem()/// {/// URL = "http://www.cckan.net",//URL 必需項/// Encoding = "gbk",//編碼格式(utf-8,gb2312,gbk) 可選項 默認類會自動識別/// Method = "get",//URL 可選項 默認為Get/// //Timeout = 100000,//連接超時時間 可選項默認為100000/// //ReadWriteTimeout = 30000,//寫入Post數據超時時間 可選項默認為30000/// //IsToLower = false,//得到的HTML代碼是否轉成小寫 可選項默認轉小寫/// Cookie = "",//字符串Cookie 可選項/// // UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用戶的瀏覽器類型,版本,操作系統 可選項有默認值/// // Accept = "text/html, application/xhtml+xml, */*",// 可選項有默認值/// // ContentType = "text/html",//返回類型 可選項有默認值/// Referer = "http://www.cckan.net",//來源URL 可選項/// //Allowautoredirect = true,//是否根據301跳轉 可選項/// //CerPath = "d:\\123.cer",//證書絕對路徑 可選項不需要證書時可以不寫這個參數/// //Connectionlimit = 1024,//最大連接數 可選項 默認為1024/// //Postdata = "username=sufei&pwd=cckan.net",//Post數據 可選項GET時不需要寫/// //ProxyIp = "192.168.1.105",//代理服務器ID 可選項 不需要代理 時可以不設置這三個參數/// //ProxyPwd = "123456",//代理服務器密碼 可選項/// // ProxyUserName = "administrator",//代理服務器賬戶名 可選項/// };/// //得到HTML代碼/// string html = http.GetHtml(item);////// //取出返回的Cookie/// string cookie = item.Cookie;/// //取出返回的Request/// HttpWebRequest request = item.Request;/// //取出返回的Response/// HttpWebResponse response = item.Response;/// //取出返回的Reader/// StreamReader reader = item.Reader;/// //取出返回的Headers/// WebHeaderCollection header = response.Headers;/// </example>/// </summary>public class HttpHelper{#region 預定義方法或者變更//默認的編碼private Encoding encoding = Encoding.Default;//HttpWebRequest對象用來發起請求private HttpWebRequest request = null;//獲取影響流的數據對象private HttpWebResponse response = null;//讀取流的對象private StreamReader reader = null;//需要返回的數據對象private string returnData = "String Error";/// <summary>/// 根據相傳入的數據,得到相應頁面數據/// </summary>/// <param name="strPostdata">傳入的數據Post方式,get方式傳NUll或者空字符串都可以</param>/// <returns>string類型的響應數據</returns>private string GetHttpRequestData(HttpItem objhttpitem){try{#region 得到請求的responseusing (response = (HttpWebResponse)request.GetResponse()){if (response.Cookies != null){objhttpitem.CookieCollection = response.Cookies;}if (response.Headers["set-cookie"] != null){objhttpitem.Cookie = response.Headers["set-cookie"];}objhttpitem.Response = response;objhttpitem.Request = request;//從這里開始我們要無視編碼了if (encoding == null){MemoryStream _stream = new MemoryStream();if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase)){objhttpitem.Reader = reader;//開始讀取流并設置編碼方式//new GZipStream(response.GetResponseStream(), CompressionMode.Decompress).CopyTo(_stream, 10240);//.net4.0以下寫法_stream = GetMemoryStream(response.GetResponseStream());}else{objhttpitem.Reader = reader;//response.GetResponseStream().CopyTo(_stream, 10240);// .net4.0以下寫法_stream = GetMemoryStream(response.GetResponseStream());}byte[] RawResponse = _stream.ToArray();string temp = Encoding.Default.GetString(RawResponse, 0, RawResponse.Length);//<meta(.*?)charset([\s]?)=[^>](.*?)>Match meta = Regex.Match(temp, "<meta([^<]*)charset=([^<]*)[\"']", RegexOptions.IgnoreCase | RegexOptions.Multiline);string charter = (meta.Groups.Count > 2) ? meta.Groups[2].Value : string.Empty;charter = charter.Replace("\"", string.Empty).Replace("'", string.Empty).Replace(";", string.Empty);if (charter.Length > 0){charter = charter.ToLower().Replace("iso-8859-1", "gbk");encoding = Encoding.GetEncoding(charter);}else{if (response.CharacterSet.ToLower().Trim() == "iso-8859-1"){encoding = Encoding.GetEncoding("gbk");}else{if (string.IsNullOrEmpty(response.CharacterSet.Trim())){encoding = Encoding.UTF8;}else{encoding = Encoding.GetEncoding(response.CharacterSet);}}}returnData = encoding.GetString(RawResponse);}else{if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase)){//開始讀取流并設置編碼方式using (reader = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress), encoding)){objhttpitem.Reader = reader;returnData = reader.ReadToEnd();}}else{//開始讀取流并設置編碼方式using (reader = new StreamReader(response.GetResponseStream(), encoding)){objhttpitem.Reader = reader;returnData = reader.ReadToEnd();}}}}#endregion}catch (WebException ex){//這里是在發生異常時返回的錯誤信息returnData = "String Error";response = (HttpWebResponse)ex.Response;objhttpitem.Response = response;}if (objhttpitem.IsToLower){returnData = returnData.ToLower();}return returnData;}/// <summary>/// 4.0以下.net版本取數據使用/// </summary>/// <param name="streamResponse"></param>private static MemoryStream GetMemoryStream(Stream streamResponse){MemoryStream _stream = new MemoryStream();int Length = 256;Byte[] buffer = new Byte[Length];int bytesRead = streamResponse.Read(buffer, 0, Length);// write the required bytes while (bytesRead > 0){_stream.Write(buffer, 0, bytesRead);bytesRead = streamResponse.Read(buffer, 0, Length);}return _stream;}/// <summary>/// 為請求準備參數/// </summary>///<param name="objhttpItem">參數列表</param>/// <param name="_Encoding">讀取數據時的編碼方式</param>private void SetRequest(HttpItem objhttpItem){#region 驗證證書if (!string.IsNullOrEmpty(objhttpItem.CerPath)){//這一句一定要寫在創建連接的前面。使用回調的方法進行證書驗證。ServicePointManager.ServerCertificateValidationCallback =new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);//初始化對像,并設置請求的URL地址request = (HttpWebRequest)WebRequest.Create(GetUrl(objhttpItem.URL));//創建證書文件X509Certificate objx509 = new X509Certificate(objhttpItem.CerPath);//添加到請求里 request.ClientCertificates.Add(objx509);}else{//初始化對像,并設置請求的URL地址request = (HttpWebRequest)WebRequest.Create(GetUrl(objhttpItem.URL));}#endregion#region 設置代理if (string.IsNullOrEmpty(objhttpItem.ProxyUserName) && string.IsNullOrEmpty(objhttpItem.ProxyPwd) && string.IsNullOrEmpty(objhttpItem.ProxyIp)){//不需要設置 }else{//設置代理服務器WebProxy myProxy = new WebProxy(objhttpItem.ProxyIp, false);//建議連接myProxy.Credentials = new NetworkCredential(objhttpItem.ProxyUserName, objhttpItem.ProxyPwd);//給當前請求對象request.Proxy = myProxy;//設置安全憑證request.Credentials = CredentialCache.DefaultNetworkCredentials;}#endregion//請求方式Get或者Postrequest.Method = objhttpItem.Method;request.Timeout = objhttpItem.Timeout;request.ReadWriteTimeout = objhttpItem.ReadWriteTimeout;//Acceptrequest.Accept = objhttpItem.Accept;//ContentType返回類型request.ContentType = objhttpItem.ContentType;//UserAgent客戶端的訪問類型,包括瀏覽器版本和操作系統信息request.UserAgent = objhttpItem.UserAgent;#region 編碼if (string.IsNullOrEmpty(objhttpItem.Encoding) || objhttpItem.Encoding.ToLower().Trim() == "null"){//讀取數據時的編碼方式encoding = null;}else{//讀取數據時的編碼方式encoding = System.Text.Encoding.GetEncoding(objhttpItem.Encoding);}#endregion#region Cookieif (!string.IsNullOrEmpty(objhttpItem.Cookie)){//Cookierequest.Headers[HttpRequestHeader.Cookie] = objhttpItem.Cookie;}//設置Cookieif (objhttpItem.CookieCollection != null){if (request.CookieContainer.Count == 0){request.CookieContainer.Add(objhttpItem.CookieCollection);}else{request.CookieContainer = new CookieContainer();request.CookieContainer.Add(objhttpItem.CookieCollection);}}#endregion//來源地址request.Referer = objhttpItem.Referer;//是否執行跳轉功能request.AllowAutoRedirect = objhttpItem.Allowautoredirect;#region Post數據//驗證在得到結果時是否有傳入數據if (!string.IsNullOrEmpty(objhttpItem.Postdata) && request.Method.Trim().ToLower().Contains("post")){byte[] buffer = Encoding.Default.GetBytes(objhttpItem.Postdata);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);}#endregion//設置最大連接if (objhttpItem.Connectionlimit > 0){request.ServicePoint.ConnectionLimit = objhttpItem.Connectionlimit;}}//回調驗證證書問題public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors){// 總是接受 return true;}#endregion#region 普通類型/// <summary> /// 傳入一個正確或不正確的URl,返回正確的URL/// </summary> /// <param name="URL">url</param> /// <returns>/// </returns> public static string GetUrl(string URL){if (!(URL.Contains("http://") || URL.Contains("https://"))){URL = "http://" + URL;}return URL;}///<summary>///采用https協議訪問網絡,根據傳入的URl地址,得到響應的數據字符串。///</summary>///<param name="objhttpItem">參數列表</param>///<returns>String類型的數據</returns>public string GetHtml(HttpItem objhttpItem){//準備參數 SetRequest(objhttpItem);//調用專門讀取數據的類return GetHttpRequestData(objhttpItem);}#endregion}/// <summary>/// Http請求參考類 /// </summary>public class HttpItem{string _URL;/// <summary>/// 請求URL必須填寫/// </summary>public string URL{get { return _URL; }set { _URL = value; }}string _Method = "GET";/// <summary>/// 請求方式默認為GET方式/// </summary>public string Method{get { return _Method; }set { _Method = value; }}int _Timeout = 100000;/// <summary>/// 默認請求超時時間/// </summary>public int Timeout{get { return _Timeout; }set { _Timeout = value; }}int _ReadWriteTimeout = 30000;/// <summary>/// 默認寫入Post數據超時間/// </summary>public int ReadWriteTimeout{get { return _ReadWriteTimeout; }set { _ReadWriteTimeout = value; }}string _Accept = "text/html, application/xhtml+xml, */*";/// <summary>/// 請求標頭值 默認為text/html, application/xhtml+xml, */*/// </summary>public string Accept{get { return _Accept; }set { _Accept = value; }}string _ContentType = "text/html";/// <summary>/// 請求返回類型默認 text/html/// </summary>public string ContentType{get { return _ContentType; }set { _ContentType = value; }}string _UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";/// <summary>/// 客戶端訪問信息默認Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)/// </summary>public string UserAgent{get { return _UserAgent; }set { _UserAgent = value; }}string _Encoding = string.Empty;/// <summary>/// 返回數據編碼默認為NUll,可以自動識別/// </summary>public string Encoding{get { return _Encoding; }set { _Encoding = value; }}string _Postdata;/// <summary>/// Post請求時要發送的Post數據/// </summary>public string Postdata{get { return _Postdata; }set { _Postdata = value; }}string _Cookie = string.Empty;/// <summary>/// 請求時的Cookie/// </summary>public string Cookie{get { return _Cookie; }set { _Cookie = value; }}string _Referer = string.Empty;/// <summary>/// 來源地址,上次訪問地址/// </summary>public string Referer{get { return _Referer; }set { _Referer = value; }}string _CerPath = string.Empty;/// <summary>/// 證書絕對路徑/// </summary>public string CerPath{get { return _CerPath; }set { _CerPath = value; }}CookieCollection cookiecollection = null;/// <summary>/// Cookie對象集合/// </summary>public CookieCollection CookieCollection{get { return cookiecollection; }set { cookiecollection = value; }}private HttpWebRequest request = null;/// <summary>/// HttpWebRequest對象用來發起請求/// </summary>public HttpWebRequest Request{get { return request; }set { request = value; }}private HttpWebResponse response = null;/// <summary>/// 獲取影響流的數據對象/// </summary>public HttpWebResponse Response{get { return response; }set { response = value; }}private Boolean isToLower = true;/// <summary>/// 是否設置為全文小寫/// </summary>public Boolean IsToLower{get { return isToLower; }set { isToLower = value; }}private StreamReader reader = null;/// <summary>/// 讀取流的對象/// </summary>public StreamReader Reader{get { return reader; }set { reader = value; }}private Boolean allowautoredirect = true;/// <summary>/// 支持跳轉頁面,查詢結果將是跳轉后的頁面/// </summary>public Boolean Allowautoredirect{get { return allowautoredirect; }set { allowautoredirect = value; }}private int connectionlimit = 1024;/// <summary>/// 最大連接數/// </summary>public int Connectionlimit{get { return connectionlimit; }set { connectionlimit = value; }}private string proxyusername = string.Empty;/// <summary>/// 代理Proxy 服務器用戶名/// </summary>public string ProxyUserName{get { return proxyusername; }set { proxyusername = value; }}private string proxypwd = string.Empty;/// <summary>/// 代理 服務器密碼/// </summary>public string ProxyPwd{get { return proxypwd; }set { proxypwd = value; }}private string proxyip = string.Empty;/// <summary>/// 代理 服務IP/// </summary>public string ProxyIp{get { return proxyip; }set { proxyip = value; }}} }</span>

?

總結

以上是生活随笔為你收集整理的HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。