1. 程式人生 > 實用技巧 >http post get 類庫 httphelper

http post get 類庫 httphelper

  public class HttpHelper
    {

        /// <summary>
        /// 請求超時時間
        /// </summary>
        public static int TimeOut { get; set; } = 100 * 1000;
        private static HttpWebRequest GetRequest(string url)
        {
            System.Net.HttpWebRequest request;
            if (url.StartsWith("
https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072; ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; ServicePointManager.CheckCertificateRevocationList
= false; ServicePointManager.DefaultConnectionLimit = 512; ServicePointManager.Expect100Continue = false; request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version10; request.KeepAlive
= false; } else { request = (System.Net.HttpWebRequest)WebRequest.Create(url); } request.Timeout = TimeOut; return request; } /// <summary> /// 客戶端統一提交資料 /// </summary> /// <param name="url">WebAPI核心URL地址</param> /// <param name="data">提交的資料</param> /// <param name="contentType">指定request.ContentType</param> /// <returns>返回資料</returns> public static GZResponseDataModel Post(string url, string data, string contentType) { System.Net.HttpWebRequest request = GetRequest(url); request.Method = "POST"; request.ContentType = contentType;// "application/json;charset=UTF-8";//POST必須使用JSON格式 if (!String.IsNullOrEmpty(data)) { string paraUrlCoded = data; byte[] payload; payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded); request.ContentLength = payload.Length; Stream writer = request.GetRequestStream(); writer.Write(payload, 0, payload.Length); writer.Close(); } return GetResponse(request); } private static GZResponseDataModel GetResponse(System.Net.HttpWebRequest request) { try { using (System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse()) { return GetResponse(response); } } catch (WebException ex) { var result = GetResponse(ex); return result; } catch (Exception ex) { GZResponseDataModel result = new GZResponseDataModel(); result.Success = false; result.StatusCode = HttpStatusCode.BadRequest; result.Message = "請求過程中發生異常:" + ex.ToString(); result.ExceptionStatus = WebExceptionStatus.UnknownError; return result; } } private static GZResponseDataModel GetResponse(WebResponse response) { string responseTxt = ""; using (System.IO.Stream s = response.GetResponseStream()) { using (StreamReader Reader = new StreamReader(s, Encoding.GetEncoding("utf-8"))) { responseTxt = Reader.ReadToEnd(); } } if (response is HttpWebResponse) { HttpStatusCode statusCode = (response as HttpWebResponse).StatusCode; GZResponseDataModel result = new GZResponseDataModel() { Success = statusCode == HttpStatusCode.OK, StatusCode = statusCode, ResponseText = responseTxt }; return result; } throw new Exception("response不是HttpWebResponse,沒有相應的處理型別"); } private static GZResponseDataModel GetResponse(WebException webException) { var response = webException.Response; if (response == null) { GZResponseDataModel result = new GZResponseDataModel() { Success = false, StatusCode = HttpStatusCode.BadRequest, ExceptionStatus = webException.Status, Message = webException.Message }; return result; //return; } string responseTxt = ""; using (System.IO.Stream s = response.GetResponseStream()) { using (StreamReader Reader = new StreamReader(s, Encoding.GetEncoding("utf-8"))) { responseTxt = Reader.ReadToEnd(); } } if (response is HttpWebResponse) { HttpStatusCode statusCode = (response as HttpWebResponse).StatusCode; GZResponseDataModel result = new GZResponseDataModel() { Success = statusCode == HttpStatusCode.OK, StatusCode = statusCode, ResponseText = responseTxt }; return result; } throw new Exception("response不是HttpWebResponse,沒有相應的處理型別"); } public static GZResponseDataModel Get(string url) { System.Net.HttpWebRequest request = GetRequest(url); request.ContentType = "text/html"; request.Method = "Get"; return GetResponse(request); } public static GZResponseDataModel PostJson(string url, string data) { string contentType = "application/json;charset=UTF-8"; return Post(url, data, contentType); } public static GZResponseDataModel PostForm(string url, string data) { string contentType = "application/x-www-form-urlencoded"; return Post(url, data, contentType); } public static GZResponseDataModel PostForm(string url, System.Collections.Specialized.NameValueCollection PostVars) { string contentType = "application/x-www-form-urlencoded"; List<string> data = new List<string>(); foreach (string key in PostVars.AllKeys) { data.Add($"{key}={PostVars[key]}"); } string strVal = String.Join("&", data.ToArray()); return Post(url, strVal, contentType); } public static void PostTestFormValue() { System.Collections.Specialized.NameValueCollection PostVars = new System.Collections.Specialized.NameValueCollection(); PostVars.Add("test", "value"); PostVars.Add("cmd", "value"); PostVars.Add("token", "value"); PostForm("url", PostVars); } } public class GZResponseDataModel { public bool Success { get; set; } public HttpStatusCode StatusCode { get; set; } public WebExceptionStatus ExceptionStatus { get; set; } public string Message { get; set; } public string ResponseText { get; set; } public T ConvertObject<T>() { return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(this.ResponseText); } }