後臺web請求web
namespace XXXX.Utilites { using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; public class PostHttpResponse { #region Static Field private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; #endregion #region public Method public static string PostHttpResponseJson(string url) { string json = string.Empty; Encoding encoding = Encoding.UTF8; HttpWebResponse Response = CreatePostHttpResponseJson(url,null,null, null, null, encoding, null); json = GetStream(Response, encoding); return json; } public static string PostHttpResponseJson(string url, string postJson) { string json = string.Empty; Encoding encoding = Encoding.UTF8; HttpWebResponse Response = CreatePostHttpResponseJson(url, postJson, null, null, null, encoding, null); json = GetStream(Response, encoding); return json; } /// <summary> /// 建立POST方式Json數據的HTTP請求(包括了https站點請求) /// </summary> /// <param name="url">請求的URL</param> /// <param name="parameters">隨同請求POST的參數名稱及參數值字典</param> /// <param name="timeout">請求的超時時間</param> /// <param name="userAgent">請求的客戶端瀏覽器信息,能夠爲空</param> /// <param name="requestEncoding">發送HTTP請求時所用的編碼</param> /// <param name="cookies">隨同HTTP請求發送的Cookie信息,若是不須要身份驗證能夠爲空</param> /// <returns></returns> public static HttpWebResponse CreatePostHttpResponseJson(string url, string postJson,string parameters, int? timeout, string userAgent, Encoding requestEncoding, string referer) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } if (requestEncoding == null) { throw new ArgumentNullException("requestEncoding"); } HttpWebRequest request = null; //若是是發送HTTPS請求 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version10; } else { request = WebRequest.Create(url) as HttpWebRequest; } request.Method = "POST"; //服務端 判斷 客戶端 提交的是不是 JSON數據 時 request.ContentType = "application/json;charset=UTF-8"; request.KeepAlive = true; if (!string.IsNullOrEmpty(userAgent)) { request.UserAgent = userAgent; } else { request.UserAgent = DefaultUserAgent; } if (timeout.HasValue) { request.Timeout = timeout.Value; } //若是須要POST數據 #region post parameter 相似querystring格式 if (parameters != null) { byte[] data = requestEncoding.GetBytes(parameters); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); stream.Close(); } } #endregion #region post json if (!string.IsNullOrEmpty(postJson)) { using (var streamWriter = new StreamWriter(request.GetRequestStream())) { //string json = "{\"user\":\"test\"," + // "\"password\":\"bla\"}"; streamWriter.Write(postJson); streamWriter.Flush(); streamWriter.Close(); } } #endregion if (!string.IsNullOrEmpty(referer)) { request.Referer = referer; } HttpWebResponse response = request.GetResponse() as HttpWebResponse; if (request.CookieContainer != null) { response.Cookies = request.CookieContainer.GetCookies(request.RequestUri); } return response; } #endregion #region Private Method private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; //老是接受 } /// <summary> /// 將response轉換成文本 /// </summary> /// <param name="response"></param> /// <param name="encoding"></param> /// <returns></returns> private static string GetStream(HttpWebResponse response, Encoding encoding) { try { if (response.StatusCode == HttpStatusCode.OK) { switch (response.ContentEncoding.ToLower()) { case "gzip": { string result = Decompress(response.GetResponseStream(), encoding); response.Close(); return result; } default: { using (StreamReader sr = new StreamReader(response.GetResponseStream(), encoding)) { string result = sr.ReadToEnd(); sr.Close(); sr.Dispose(); response.Close(); return result; } } } } else { response.Close(); } } catch (Exception e) { throw e; } return ""; } private static string Decompress(Stream stream, Encoding encoding) { byte[] buffer = new byte[100]; //int length = 0; using (GZipStream gz = new GZipStream(stream, CompressionMode.Decompress)) { //GZipStream gzip = new GZipStream(res.GetResponseStream(), CompressionMode.Decompress); using (StreamReader reader = new StreamReader(gz, encoding)) { return reader.ReadToEnd(); } /* using (MemoryStream msTemp = new MemoryStream()) { //解壓時直接使用Read方法讀取內容,不能調用GZipStream實例的Length等屬性,不然會出錯:System.NotSupportedException: 不支持此操做; while ((length = gz.Read(buffer, 0, buffer.Length)) != 0) { msTemp.Write(buffer, 0, length); } return encoding.GetString(msTemp.ToArray()); } * */ } } #endregion } }