• C# WebRequest 请求HTTPS 基础连接已关闭:发送时发生错误,远程主机强迫关闭了一个现有有连接


    internal static class SendRequest
        {
            private static string GetBody(Dictionary<string, string> senddata)
            {
                if (senddata == null)
                {
                    senddata = new Dictionary<string, string>();
                }
                StringBuilder buffer = new StringBuilder();
                int i = 0;
                foreach (string k in senddata.Keys)
                {
                    if (i > 0)
                    {
                        buffer.AppendFormat("&{0}={1}", k, senddata[k]);
                    }
                    else
                    {
                        buffer.AppendFormat("{0}={1}", k, senddata[k]);
                    }
                    i++;
                }
                string bodys = buffer.ToString();
                return bodys;
            }
    
            public static string Send(string url, Dictionary<string, string> headerdata, Dictionary<string, string> senddata)
            {
                return Send(url, "POST", headerdata, senddata, "application/x-www-form-urlencoded;charset=UTF-8");
            }
    
            public static string Send(string url, string method, Dictionary<string, string> headerdata, Dictionary<string, string> senddata)
            {
                return Send(url, method, headerdata, senddata, "application/x-www-form-urlencoded;charset=UTF-8");
            }
            public static string Send(string url, string method, Dictionary<string, string> headerdata, Dictionary<string, string> senddata, string contentType)
            {
                string bodys = GetBody(senddata);
                //new internalErrorLog(new Exception(), "SendBody:" + bodys);
                HttpWebRequest httpRequest = null;
                HttpWebResponse httpResponse = null;
    
                if (url.Contains("https://"))
                {
                    //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
                    /*
                     请求某些接口一直返回基础连接已关闭:发送时发生错误
                     远程主机强迫关闭了一个现有的连接
                     */
                    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
                    ServicePointManager.Expect100Continue = false;
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    
                    httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
                    httpRequest.ProtocolVersion = HttpVersion.Version10;
    
                }
                else
                {
                    httpRequest = (HttpWebRequest)WebRequest.Create(url);
                }
                httpRequest.Proxy = null;
                httpRequest.Method = method;
                foreach (string k in headerdata.Keys)
                {
                    httpRequest.Headers.Add(k, headerdata[k]);
                }
                //new internalErrorLog(new Exception(), "SendHeader:" + Newtonsoft.Json.JsonConvert.SerializeObject(headerdata));
                //根据API的要求,定义相对应的Content-Type
                httpRequest.ContentType = contentType;
                if (0 < bodys.Length)
                {
                    byte[] data = Encoding.UTF8.GetBytes(bodys);
                    using (Stream stream = httpRequest.GetRequestStream())
                    {
                        stream.Write(data, 0, data.Length);
                    }
                }
                try
                {
                    httpRequest.ServicePoint.Expect100Continue = false;
                    httpResponse = (HttpWebResponse)httpRequest.GetResponse();
                    Stream st = httpResponse.GetResponseStream();
                    StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));
                    string json = reader.ReadToEnd();
                    return json;
                }
                catch (WebException ex)
                {
                    new internalErrorLog(ex, "请求URL:" + url);
                    httpResponse = (HttpWebResponse)ex.Response;
                    return ex.Message;
                }
            }
    
            private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                return true;
            }
    
            public static string SendGet(string url, Dictionary<string, string> headerdata)
            {
                HttpWebRequest httpRequest = null;
                HttpWebResponse httpResponse = null;
    
                if (url.Contains("https://"))
                {
                    ServicePointManager.SecurityProtocol =(SecurityProtocolType)3072;
                    ServicePointManager.Expect100Continue = false;
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
                    httpRequest.ProtocolVersion = HttpVersion.Version10;
                }
                else
                {
                    httpRequest = (HttpWebRequest)WebRequest.Create(url);
                }
                httpRequest.Proxy = null;
                httpRequest.Method = "Get";
                httpRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
                foreach (string k in headerdata.Keys)
                {
                    httpRequest.Headers.Add(k, headerdata[k]);
                }
                try
                {
                    httpResponse = (HttpWebResponse)httpRequest.GetResponse();
                    Stream st = httpResponse.GetResponseStream();
                    StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));
                    string json = reader.ReadToEnd();
                    return json;
                }
                catch (WebException ex)
                {
                    httpResponse = (HttpWebResponse)ex.Response;
                    return ex.Message;
                }
            }
    
            public static string SendJSON(string url, JObject objdata)
            {
                string jsondata = objdata.ToString();
                return SendJSON(url, jsondata);
            }
    
            public static string SendJSON(string url, string jsondata)
            {
                HttpWebRequest httpRequest = null;
                HttpWebResponse httpResponse = null;
    
                if (url.Contains("https://"))
                {
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
                    ServicePointManager.Expect100Continue = false;
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
                    httpRequest.ProtocolVersion = HttpVersion.Version10;
                    httpRequest.KeepAlive = false;
                    ServicePointManager.DefaultConnectionLimit = 500;
                }
                else
                {
                    httpRequest = (HttpWebRequest)WebRequest.Create(url);
                }
                httpRequest.Proxy = null;
                httpRequest.Method = "POST";
                httpRequest.ContentType = "application/json";
                //WebClient.UploadString("", jsondata);
                try
                {
                    httpRequest.ServicePoint.Expect100Continue = false;
                    byte[] buffer = Encoding.UTF8.GetBytes(jsondata);
                    //new internalErrorLog(new Exception(jsondata));
                    httpRequest.ContentLength = buffer.Length;
                    httpRequest.GetRequestStream().Write(buffer, 0, buffer.Length);
                    httpResponse = (HttpWebResponse)httpRequest.GetResponse();
                    Stream st = httpResponse.GetResponseStream();
                    StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));
                    string json = reader.ReadToEnd();
                    return json;
                }
                catch (WebException ex)
                {
                    new internalErrorLog(ex, "发送地址:" + url);
                    httpResponse = (HttpWebResponse)ex.Response;
                    return ex.Message;
                }
            }
    
            public static string SendJSON(string url, Dictionary<string, string> header, string jsondata)
            {
                HttpWebRequest httpRequest = null;
                HttpWebResponse httpResponse = null;
    
                if (url.Contains("https://"))
                {
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
                    ServicePointManager.Expect100Continue = false;
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
                }
                else
                {
                    httpRequest = (HttpWebRequest)WebRequest.Create(url);
                }
                httpRequest.Method = "POST";
                httpRequest.ContentType = "application/json";
                foreach (string k in header.Keys)
                {
                    httpRequest.Headers.Add(k, header[k]);
                }
                //WebClient.UploadString("", jsondata);
                try
                {
                    httpRequest.ServicePoint.Expect100Continue = false;
                    byte[] buffer = Encoding.UTF8.GetBytes(jsondata);
                    new internalErrorLog(new Exception(jsondata));
                    httpRequest.ContentLength = buffer.Length;
                    httpRequest.GetRequestStream().Write(buffer, 0, buffer.Length);
                    httpResponse = (HttpWebResponse)httpRequest.GetResponse();
                    Stream st = httpResponse.GetResponseStream();
                    StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));
                    string json = reader.ReadToEnd();
                    return json;
                }
                catch (WebException ex)
                {
                    httpResponse = (HttpWebResponse)ex.Response;
                    return ex.Message;
                }
            }
    
            public static string Submit(string url, Hashtable ht, string type)
            {
                return Submit(url, ht, type, Encoding.Default);
            }
    
            public static string Submit(string url, NameValueCollection ht, string type)
            {
                return Submit(url, ht, type, Encoding.Default);
            }
    
            public static string Submit(string url, Hashtable ht, string type, Encoding encoding)
            {
                IDictionaryEnumerator enumerator = ht.GetEnumerator();
                NameValueCollection keyValue = new NameValueCollection();
                while (enumerator.MoveNext())
                {
                    keyValue.Add(enumerator.Key.ToString(), (enumerator.Value == null) ? "" : enumerator.Value.ToString());
                }
                return Submit(url, keyValue, type, encoding);
            }
    
            private static string Submit(string url, NameValueCollection keyValue, string type, Encoding encoding)
            {
                string str = string.Empty;
                WebClient client = new WebClient();
                try
                {
                    byte[] bytes = client.UploadValues(url, type.ToString(), keyValue);
                    str = encoding.GetString(bytes);
                }
                catch (Exception exception)
                {
                    throw exception;
                }
                finally
                {
                    client.Dispose();
                }
                return str;
            }
        }
  • 相关阅读:
    selective search生成.mat文件
    2014 百度之星 1003 题解 Xor Sum
    hdu 2544 最短路
    表解锁
    第 10 章 数据结构
    MySQL Study之--Percona Server版本号
    const 不再迷茫
    opecv2 MeanShift 使用均值漂移算法查找物体
    server用JDBC对mysql数据库进行操作
    Django Admin site 显示问题
  • 原文地址:https://www.cnblogs.com/gxivwshjj/p/16378137.html
Copyright © 2020-2023  润新知