您現在的位置: 365建站網 > 365學習 > HttpWebRequest 基礎連接已經關閉: 接收時發生錯誤的解決方法

HttpWebRequest 基礎連接已經關閉: 接收時發生錯誤的解決方法

文章來源:365jz.com     點擊數:3883    更新時間:2020-06-27 22:55   參與評論

HttpWebRequest 基礎連接已經關閉: 接收時發生錯誤 

HttpWebRequest 基礎連接已經關閉: 發送時發生錯誤 

HttpWebRequest 基礎連接已關閉 連接意外關閉

報的錯誤為:1. "基礎連接已經關閉: 發送時發生錯誤";

之前的寫法:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3

能解決問題的寫法:

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

分析:因為請求的url是基于https的,所以Post請求時必須添加ServicePointManager.SecurityProtocol。但選擇哪個協議呢?一開始看到項目里面都是基于ssl的,索性也用了ssl,但是沒有效果,最后干脆直接把所以的協議枚舉用或的形式全都寫出來,成功了。

SSL驗證一定要寫在WebRequest.Create(url)前面


針對使用httpWebRequest優化的幾種解決方案:


      1、在GetResponse() 前加上這句ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;  這句代碼是讓你的程序適應https請求協議。


      2、httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);  在行代碼前添加System.GC.Collect();   用于程序垃圾資源回收


      3、如果Http的請求,是設置了KeepAlive=true的話,那么對應的http的connection會和服務器保持連接的。所以如果上述辦法都不能解決超時的問題,可以嘗試將keepAlive設置為false試試,看看能否解決。


      4、httpWebRequest.ServicePoint.ConnectionLimit = maxTry;  默認ConnectionLimit是2個連接數,所以可以通過修改連接數嘗試解決該問題??梢愿牡?00-300,但是不要改太大,容易對程序照成壓力。


      5、另外你初始化的都要在用完之后,進行關閉和回收。(HttpWebRequest  HttpWebResponse)     雖然每種開發語言都有自己的回收機制,但是要記著一點再好的人,也有累的時候,累了就不給你干活了,所以平時對它們好點。


      如果上面的方法都無法解決你的問題,可以嘗試一下我最后的解決方案。


      最后我發現只有在一臺服務器上面出問題,后來經過查找,發現是這臺服務器被配置了代理服務器,通過代理服務器的方式進行外網的訪問。所以找到原因就好辦了,只要在創建HttpWebRequest  對象之前,在創建一個代理服務器的對象,并且把服務器的代理地址和端口實例化到代理服務器對象。


public  string GetHTML(string url, byte[] postData, bool isPost, CookieContainer cookieContainer,string refurl)
        {
            ServicePointManager.Expect100Continue = false;
            Thread.Sleep(NetworkDelay);//等待
            currentTry++;
            HttpWebRequest httpWebRequest = null;
           
            HttpWebResponse httpWebResponse = null;
            try
            {
               // byte[] byteRequest = Encoding.Default.GetBytes(postData);
                byte[] byteRequest = postData;
                httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
                if (Proxy != null)
                    httpWebRequest.Proxy = Proxy;      //代理服務器設置
                httpWebRequest.CookieContainer = cookieContainer;
                httpWebRequest.ContentType = contentType;
                httpWebRequest.ServicePoint.ConnectionLimit = maxTry;
                httpWebRequest.Referer = refurl;
                httpWebRequest.Accept = accept;
                httpWebRequest.UserAgent = userAgent;
                httpWebRequest.Method = isPost ? "POST" : "GET";
                httpWebRequest.ContentLength = byteRequest.Length;
                Stream stream = httpWebRequest.GetRequestStream();
                stream.Write(byteRequest, 0, byteRequest.Length);
                stream.Close();
                httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                Stream responseStream = httpWebResponse.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream, encoding);
                string html = streamReader.ReadToEnd();
                streamReader.Close();
                responseStream.Close();
                currentTry = 0;
                httpWebRequest.Abort();
                httpWebResponse.Close();
                foreach (Cookie cookie in httpWebResponse.Cookies)
                {
                    cookieContainer.Add(cookie);
                }
                return html;
            }
            catch (Exception)
            {
                if (httpWebRequest != null)
                {
                    httpWebRequest.Abort();
                } if (httpWebResponse != null)
                {
                    httpWebResponse.Close();
                }
                return "";
            }
        }


如對本文有疑問,請提交到交流論壇,廣大熱心網友會為你解答??! 點擊進入論壇


發表評論 (3883人查看,2條評論)
請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
用戶名: 驗證碼: 點擊我更換圖片
最新評論
2022年01月24日 11:24apollo

不錯 推薦

2022年01月24日 11:23apollo

84546

------分隔線----------------------------
自拍偷拍福力视频,偷拍国际精品,麻豆一区福利电影,国产网红视频午夜福利,se视频大全,久久国产AV影院 师生辣文师生边h边做题| 韩国全部三级伦在线播放| 国产孕妇a片全部精品| 亚洲欧美日韩成人卡通| 51社区在线永久免费视频| 国产精品偷伦视频观看免费| 苍井空肉教师在线播放| 亚洲日韩看片无码超清| 和狗做被婆婆看到拉婆婆下水| 乱子伦xxxx| youjljloljzz在线播放| 天天摸天天透天天添| 女人与公拘交的A片视频网站| 久久爱在线看精品999| 学生毛都没有在线播放| 少妇人妻系列无码专区视频| freesex呦交| 14~18xxxx69| 在线看| 亚洲在线道清在线| xx凸厕所女小便视频| 日批视频| 51亚洲宅男天堂在线观看| 欧美巨大性爽欧美精品| 男人的天aⅴ在线无码| 日本av无码一区二区三区| 欧美 日产 国产精选| 岳让我添下面| 大陆毛片农村妇女系列bd版| 成 人 动漫在线观看网站| 奶水饱胀的人妻在线播放| http://www.covenantcarecdc.com