using NCC.Code; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; //using System.Net.Http.Formatting; using System.Net.Http.Headers; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; using System.Web; namespace Antis.Pay.Core { public static class HTTPHelper { private static string USER_AGENT = string.Format("WXPaySDK/{3} ({0}) .net/{1} {2}", Environment.OSVersion, Environment.Version, WepayConfig.WEPAY_APP_MCH_ID, typeof(HTTPHelper).Assembly.GetName().Version); public static string Post(string url, string content, string contentType = "application/x-www-form-urlencoded") { string result = string.Empty; try { using (var client = new HttpClient()) { client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType)); var stringContent = new StringContent(content, Encoding.UTF8); var response = client.PostAsync(url, stringContent).Result; result = response.Content.ReadAsStringAsync().Result; } } catch (Exception e) { throw new Exception("POST请求错误" + e.ToString()); } return result; } public static string Post(string url, string xml, bool isUseCert, int timeout) { System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接 string result = "";//返回结果 HttpWebRequest request = null; HttpWebResponse response = null; Stream reqStream = null; try { //设置最大连接数 ServicePointManager.DefaultConnectionLimit = 200; Log4jHelper.LogInfo($"https验证方式之前"); //设置https验证方式 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { Log4jHelper.LogInfo($"进入https验证方式"); ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | (SecurityProtocolType)0x300 //Tls11 | (SecurityProtocolType)0xC00; //Tls12 } /*************************************************************** * 下面设置HttpWebRequest的相关属性 * ************************************************************/ request = (HttpWebRequest)WebRequest.Create(url); request.UserAgent = USER_AGENT; request.Method = "POST"; request.Timeout = timeout * 1000; //设置代理服务器 //WebProxy proxy = new WebProxy(); //定义一个网关对象 //proxy.Address = new Uri(WxPayConfig.PROXY_URL); //网关服务器端口:端口 //request.Proxy = proxy; //设置POST的数据类型和长度 request.ContentType = "text/xml"; byte[] data = System.Text.Encoding.UTF8.GetBytes(xml); request.ContentLength = data.Length; //是否使用证书 if (isUseCert) { string path = HttpContext.Current.Request.PhysicalApplicationPath; X509Certificate2 cert = new X509Certificate2(path + WepayConfig.WECHAT_SSlCertPath, WepayConfig.WECHAT_SSlCertPass); request.ClientCertificates.Add(cert); Log4jHelper.LogInfo($"使用证书"+cert); } //往服务器写入数据 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) { Log4jHelper.LogInfo($"ThreadAbortException异常 {e.Message}"); System.Threading.Thread.ResetAbort(); } catch (WebException e) { Log4jHelper.LogInfo($"WebException异常 {e.Message}"); if (e.Status == WebExceptionStatus.ProtocolError) { //Log.Error("HttpService", "StatusCode : " + ((HttpWebResponse)e.Response).StatusCode); //Log.Error("HttpService", "StatusDescription : " + ((HttpWebResponse)e.Response).StatusDescription); } throw; } catch (Exception e) { Log4jHelper.LogInfo($"Exception异常 {e.Message}"); throw; } finally { //关闭连接和流 if (response != null) { response.Close(); } if (request != null) { request.Abort(); } } return result; } public static string Get(string url, int timeout, string contentType = "application/x-www-form-urlencoded") { string result = string.Empty; try { using (var client = new HttpClient()) { client.Timeout = new TimeSpan(0, 0, 0, 0, timeout); var response = client.GetAsync(url).Result; result = response.Content.ReadAsStringAsync().Result; }; } catch (Exception e) { throw new Exception("GET请求错误" + e.ToString()); } return result; } public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { //直接确认,否则打不开 return true; } } }