基础连接已经关闭: 发送时发生错误

对接别的平台时,发送的请求是https,发送请求时会遇到“基础连接已经关闭: 发送时发生错误”的问题。看到了平台上的问题解答,发现这个方法挺好用,就在此记录一下。

转载自:https://blog.csdn.net/qq_36748627/article/details/113753934

最佳解决方案

/// <summary>

        /// 指定Post地址使用Get 方式获取全部字符串

        /// </summary>

        /// <param name="url">请求后台地址</param>

        /// <returns></returns>

        public static string Post(string url, string paramString)

        {

            string result = "";

            //HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

            HttpWebRequest request = null;

            //如果是发送HTTPS请求 

            if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))

            {

                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);

                //关于ServicePointManager.SecurityProtocol的设置是解决问题的关键。

                //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Ssl3;

                //.Net4.0

                ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

                //.Net4.5

                //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls1.2;

                request = WebRequest.Create(url) as HttpWebRequest;

                request.ProtocolVersion = HttpVersion.Version10;

 

            }

            else

            {

                request = WebRequest.Create(url) as HttpWebRequest;

            }

            request.Timeout = 5000;

            request.Method = "POST";

            request.ContentType = "application/json";

            #region 添加Post 参数

 

            byte[] data = Encoding.UTF8.GetBytes(paramString);

            request.ContentLength = data.Length;

            using (Stream reqStream = request.GetRequestStream())

            {

                reqStream.Write(data, 0, data.Length);

                reqStream.Close();

            }

            #endregion

            HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

            Stream stream = resp.GetResponseStream();

            //获取响应内容

            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))

            {

                result = reader.ReadToEnd();

            }

            return result;

        }

 

        private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)

        {

            return true; //总是接受 

        }


潇洒哥的小号 T1 被采纳率94%
2022-10-27 18:21
打赏 0 0
页面统计
335 访问
0 帮助
0.00 打赏

hierror 2019 © hierror.com 京ICP备13026190号-1

通知消息
  • 暂无任何消息