using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.Net; using System.IO; using System.Security.Cryptography.X509Certificates; using System.Net.Security; using System; /// <summary> ///HttpHelpers 主要是實現Http方式的Get和Post方式請求 /// </summary> public class HttpHelpers { /// <summary> /// 構造器實現預設屬性的賦值 /// </summary> public HttpHelpers() { } #region 所有的屬性 //訪問的頁面地址 private string RequestURl { get; set; } //預設的編碼 private Encoding encoding { get; set; } //HttpWebRequest對象用來發起請求 private HttpWebRequest request { get; set; } //擷取影響流的資料對象 private HttpWebResponse response { get; set; } //認證檔案X509Certificate objx509 = new X509Certificate(Application.StartupPath + "\\123.cer"); X509Certificate objx509 { get; set; } //請求方式目前只提供Post和Get方式 private string Method { get; set; } //Accept屬性 private string Accept { get; set; } //ContentType屬性 private string ContentType { get; set; } //UserAgent屬性 private string UserAgent { get; set; } //Cookie列表 private CookieContainer cookie { get; set; } //需要返回的資料對象 private string reutrnDate { get; set; } //Post資料串 private string strPostdata { get; set; } #endregion #region 內部方法 //回調驗證認證問題 private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { // 總是接受 return true; } private void load() { //佈建要求方式為Post request.Method = "GET"; request.Accept = "text/html, application/xhtml+xml, */*"; request.ContentType = "application/x-www-form-urlencoded"; } /// <summary> /// 根據相傳入的資料,得到相應頁面資料 /// </summary> /// <param name="strPostdata">傳入的資料Post方式,get方式傳NUll或者Null 字元串都可以</param> /// <returns>string類型的響應資料</returns> private string GetHttpRequestData() { try { //是否要添加認證驗證 if (objx509 != null) { //這一句一定要寫在建立串連的前面。使用回調的方法進行認證驗證。 ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); } //建立request對象 request = (HttpWebRequest)WebRequest.Create(RequestURl); //是否要添加認證驗證 if (objx509 != null) request.ClientCertificates.Add(objx509); //是否帶有Cookie值 if (cookie != null) request.CookieContainer = cookie; //當為post提交是需要填充資料 if (Method.Trim().ToLower() == "post") { byte[] buffer = encoding.GetBytes(strPostdata); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); } //得到請求的response using (response = (HttpWebResponse)request.GetResponse()) { //從這裡開始我們要無視編碼了 if (encoding == null) GetEonding(); //開始讀取流並設定編碼方式 using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding)) { //從當前開始讀取整個流資料,預設為0所以讀取的是全部,並返回資料 reutrnDate = reader.ReadToEnd().ToString().Trim(); } } } catch (Exception) { //這裡是在發生異常時返回的錯誤資訊 reutrnDate = "String Error"; } return reutrnDate; } /// <summary> /// 得到response對象的編碼類別型 /// </summary> private void GetEonding() { if (response.CharacterSet.Trim() != "") encoding = System.Text.Encoding.GetEncoding(response.CharacterSet.Trim()); else encoding = System.Text.Encoding.UTF8; } #endregion #region 公開方法 /// <summary> /// 只設定一些簡單參數的方式 /// </summary> /// <param name="_url">URl地址</param> /// <param name="_strPostdata">Post請求方式時傳入的資料</param> /// <param name="_Method">請求方式GET或者POST可以為空白預設為GET</param> /// <param name="_encoding">編碼方式可以為空白預設為UTF-8</param> /// <param name="_Accept">Accept屬性</param> /// <param name="_ContentType">ContentType屬性</param /// <param name="_UserAgent">UserAgent屬性</param /// <param name="_cookie">CookieContainer列表</param /// <param name="_objx509">X509Certificate認證對象</param /// <returns>請求所得到的資料</returns> public string GetString_null(string _url, string _strPostdata, string _Method, Encoding _encoding, string _Accept, string _ContentType, string _UserAgent, CookieContainer _cookie, X509Certificate _objx509) { RequestURl = _url; Method = _Method; encoding = _encoding; Accept = _Accept; ContentType = _ContentType; UserAgent = _UserAgent; cookie = _cookie; objx509 = _objx509; return GetHttpRequestData(); } /// <summary> /// 只設定一些簡單參數的方式 /// </summary> /// <param name="_url">URl地址</param> /// <param name="_strPostdata">Post請求方式時傳入的資料</param> /// <param name="_Method">請求方式GET或者POST可以為空白預設為GET</param> /// <param name="_encoding">編碼方式可以為空白預設為UTF-8</param> /// <returns>請求所得到的資料</returns> public string GetString_type(string _url, string _strPostdata, string _Method, Encoding _encoding) { RequestURl = _url; strPostdata = _strPostdata; Method = _Method; encoding = _encoding; return GetHttpRequestData(); } //下面大家自己可以多寫幾種常用的,呵呵 #endregion }