class HttpService { /// <summary> /// 處理http POST請求 /// </summary> /// <param name="url">請求的url地址</param> /// <param name="headers">協議標頭</param> /// <param name="contentType">請求的內容類型</param> /// <param name="dataStream">請求的數據流</param> /// <param name="timeout">請求的超時時間(秒)</param> /// <returns>http POST成功后返回的數據,失敗拋異常</returns> public static string Post(string url, Headers headers, string contentType, string dataStream, int timeout) { System.GC.Collect();//垃圾回收,回收沒有正常關閉的http鏈接 HttpWebRequest request = null; HttpWebResponse response = null; Stream reqStream = null; string result = ""; try { //設置最大鏈接數 ServicePointManager.DefaultConnectionLimit = 200; //設置https驗證方式 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CertificateValidation); } request = (HttpWebRequest)WebRequest.Create(url); //HttpWebRequest 相關屬性 request.Method = "POST"; request.Timeout = timeout * 1000; request.ContentType = contentType; //配置協議標頭 if (headers != null) { request.Headers.Set(headers.Name, headers.Value); } byte[] data = System.Text.Encoding.UTF8.GetBytes(dataStream); request.ContentLength = data.Length; //寫入數據 reqStream = request.GetRequestStream(); reqStream.Write(data, 0, data.Length); reqStream.Close(); //返回數據 response = (HttpWebResponse)request.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); result = sr.ReadToEnd().Trim(); sr.Close(); } //處理多線程模式下線程中止 //catch (System.Threading.ThreadAbortException e) //{ // System.Threading.Thread.ResetAbort(); //} catch (Exception e) { throw new HttpServiceException(e.ToString()); } finally { //關閉連接和流 if (response != null) { response.Close(); } if (request != null) { request.Abort(); } } return result; } /// <summary> /// 處理http GET請求 /// </summary> /// <param name="url">請求的url地址</param> /// <returns></returns> public static string Get(string url) { System.GC.Collect();//垃圾回收,回收沒有正常關閉的http鏈接 string result = ""; HttpWebRequest request = null; HttpWebResponse response = null; try { //設置最大鏈接數 ServicePointManager.DefaultConnectionLimit = 200; //設置https驗證方式 if(url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CertificateValidation); } request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; //返回數據 response = (HttpWebResponse)request.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); result = sr.ReadToEnd().Trim(); sr.Close(); } //處理多線程模式下線程中止 //catch (System.Threading.ThreadAbortException e) //{ // System.Threading.Thread.ResetAbort(); //} catch (Exception e) { throw new HttpServiceException(e.ToString()); } finally { //關閉連接和流 if(response != null) { response.Close(); } if(request != null) { request.Abort(); } } return result; } /* 忽略證書認證錯誤 * .NET的SSL通信過程中,使用的證書可能存在各種問題 * 此方法可以跳過服務器證書驗證,完成正常通信。*/ private static bool CertificateValidation(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { // 認證正常,沒有錯誤 return true; } } /// <summary> /// 協議標頭 /// </summary> class Headers { public string Name { get; set; } public string Value { get; set; } public Headers(string name,string value) { this.Name = name; this.Value = value; } } class HttpServiceException : Exception { public HttpServiceException(string msg) : base(msg) { } }