我用的不错的webrequesthelper
using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Linq; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; namespace Component.Extension { static public class WebRequestHelper { #region 发送POST /// <summary> /// Post请求 /// </summary> /// <param name="url"></param> /// <param name="sParaTemp"></param> /// <param name="isThrowException"></param> /// <returns></returns> public static string SendPostRequest(string url, IDictionary<string, string> sParaTemp,bool isThrowException=false) { return SendPostRequest((HttpWebRequest)WebRequest.Create(url), Encoding.UTF8, sParaTemp, isThrowException); } /// <summary> /// Post请求 /// </summary> /// <param name="url"></param> /// <param name="encoding"></param> /// <param name="sParaTemp"></param> /// <param name="isThrowException"></param> /// <returns></returns> public static string SendPostRequest(string url, Encoding encoding, IDictionary<string, string> sParaTemp, bool isThrowException = false) { return SendPostRequest((HttpWebRequest) WebRequest.Create(url), encoding, sParaTemp, isThrowException); } /// <summary> /// Post请求 /// </summary> /// <param name="url"></param> /// <param name="encoding"></param> /// <param name="isThrowException"></param> /// <returns></returns> public static string SendGetRequest(string url, Encoding encoding, bool isThrowException = false) { return SendRequest((HttpWebRequest)WebRequest.Create(url), encoding, null,"get", isThrowException); } /// <summary> /// Post请求 /// </summary> /// <param name="myReq"></param> /// <param name="encoding"></param> /// <param name="sParaTemp"></param> /// <param name="isThrowException"></param> /// <returns></returns> public static string SendPostRequest(HttpWebRequest myReq, Encoding encoding, IDictionary<string, string> sParaTemp, bool isThrowException = false) { return SendRequest(myReq, encoding, sParaTemp, "post", isThrowException); } /// <summary> /// /// </summary> /// <param name="myReq"></param> /// <param name="encoding"></param> /// <param name="sParaTemp"></param> /// <param name="method"></param> /// <param name="isThrowException"></param> /// <returns></returns> public static string SendRequest(HttpWebRequest myReq, Encoding encoding, IDictionary<string, string> sParaTemp,string method, bool isThrowException=false) { var sPara = new StringBuilder(); if (sParaTemp != null && sParaTemp.Count > 0) { var @params = string.Join("&", sParaTemp.ToList().Select(it => $"{it.Key}={it.Value}")); sPara = new StringBuilder(@params); //foreach (var val in sParaTemp) //{ // //string.Join("&", $"{val.Key}={val.Value}"); // sPara.AppendFormat("{0}={1}&", val.Key, val.Value); //} //sPara.Remove(sPara.Length - 1, 1); } myReq.ContentType = "application/x-www-form-urlencoded"; myReq.Method = method; return SendRequest(myReq, encoding, sPara.ToString(), isThrowException); } /// <summary> /// /// </summary> /// <param name="myReq"></param> /// <param name="encoding"></param> /// <param name="content"></param> /// <param name="isThrowException"></param> /// <returns></returns> public static string SendRequest(HttpWebRequest myReq, Encoding encoding, string content, bool isZip, bool isThrowException = false) { if (isThrowException) return Request(myReq, encoding, content,false); try { return Request(myReq, encoding, content, false); } catch (WebException ex) // 这样我们就能捕获到异常,并且获取服务器端的输出 { if (ex.Response == null) throw ex; var wenReq = (HttpWebResponse)ex.Response; if (wenReq == null) throw ex; var myStream = wenReq.GetResponseStream(); if (myStream == null) throw ex; if (isZip) { myStream = new GZipStream(myStream, CompressionMode.Decompress); } using (var reader = new StreamReader(myStream, encoding)) { return reader.ReadToEnd(); } } catch (Exception ex) { } return null; } /// <summary> /// /// </summary> /// <param name="myReq"></param> /// <param name="encoding"></param> /// <param name="content"></param> /// <param name="isZip"></param> /// <returns></returns> public static string Request(HttpWebRequest myReq, Encoding encoding, string content,bool isZip) { ServicePointManager.Expect100Continue = true; if (ServicePointManager.SecurityProtocol != 0) ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3 | (SecurityProtocolType)768 | (SecurityProtocolType)3072; //request.ProtocolVersion = HttpVersion.Version10; ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true; if (!string.IsNullOrWhiteSpace(content)) { byte[] bytesRequestData = encoding.GetBytes(content); myReq.ContentLength = bytesRequestData.Length; var requestStream = myReq.GetRequestStream(); requestStream.Write(bytesRequestData, 0, bytesRequestData.Length); requestStream.Close(); } var httpWResp = (HttpWebResponse)myReq.GetResponse(); var myStream = httpWResp.GetResponseStream(); if (myStream == null) return null; if (isZip) { myStream = new GZipStream(myStream, CompressionMode.Decompress); } var reader = new StreamReader(myStream, encoding); var result = reader.ReadToEnd(); myStream.Close(); return result; } /// <summary> /// Post请求 /// </summary> /// <param name="url"></param> /// <param name="encoding"></param> /// <param name="content"></param> /// <param name="contentType"></param> /// <returns></returns> public static string SendPostRequest(string url, Encoding encoding, string content, string contentType= "application/x-www-form-urlencoded") { var request = (HttpWebRequest)WebRequest.Create(url); request.ContentType= contentType; return SendPostRequest(request, encoding, content); } /// <summary> /// Post请求 /// </summary> /// <param name="myReq"></param> /// <param name="encoding"></param> /// <param name="content"></param> /// <returns></returns> public static string SendPostRequest(HttpWebRequest myReq, Encoding encoding, string content) { myReq.Method = "POST"; return SendRequest(myReq, encoding, content,false); } #endregion #region 证书服务 /// <summary> /// 创建带证书设置的httpwebrequest /// </summary> /// <param name="url">请求地址</param> /// <param name="certFileName">证书名全路径</param> /// <param name="certPassword">证书密码</param> /// <returns></returns> public static WebRequest CreateWebRequestWithCertificate(string url, string certFileName, string certPassword) { HttpWebRequest request = null; var cert = CreateX509Certificate(certFileName, certPassword); if (cert != null) { request = (HttpWebRequest)WebRequest.Create(url); request.ClientCertificates.Add(cert); } return request; } /// <summary> /// 获取指定证书 /// </summary> /// <param name="certFileName">证书名全路径</param> /// <param name="certPassword">证书密码</param> /// <returns></returns> public static X509Certificate2 CreateX509Certificate(string certFileName, string certPassword) { X509Certificate2 cer = new X509Certificate2(certFileName, certPassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); return cer; } #endregion } }