c# HttpClient 發送請求出錯時解決辦法


  本人在改造舊項目時遇到一個http發送請求在本地怎么都好使,但是在測試服務器始終失敗的問題,給的錯誤信息也只有一句話:“發送請求時出錯”,使用的是HttpClient對象發出的請求。

使用PostMan也是可以正常發送的,但是就是一到測試服務器就失敗,我的測試服務器是配置了https證書的,目標服務器也是https,費了好久排查代碼問題,甚至不惜更換底層代碼還是不好使。  被逼無奈還是百度吧,沒想到網上早就有類似問題了:

 

我的上一篇采坑文章:APP項目http請求無法通信的錯誤:c# – 因為算法不同,客戶端和服務器無法通信

 

原因是:發送請求的消息http協議版本問題,應該設置.net 4.5支持的最高版本TLZ1.2,我原來已經遇到過一次這個坑了,只是上次的坑錯誤比較明顯,這次的坑就這么一句不明不白的話。  哎,“發送請求時出錯”。

 

解決方案:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

 

道友地址:c# WebClient,HttpClient 發送請求出錯時解決辦法

 

在C# 使用 HttpClient或 WebClient發送請求時

提示  :

請求被中止: 未能創建 SSL/TLS 安全通道

發送請求時出錯

的問題

解決辦法:在發送請求地址代碼前加如下代碼

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;( | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;)

問題解決!

如:

            HttpClient httpClient = new HttpClient();
           System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            var res = await httpClient.GetAsync(url);
            var contentStr = await res.Content.ReadAsStringAsync();

或者(經過測試,下面的方法是不好使的,大家看到時使用第一種方案):

handler = new HttpClientHandler() ;
handler.AllowAutoRedirect = true;
handler.UseCookies = true;
handler.CookieContainer = cookies;

handler.ClientCertificateOptions = ClientCertificateOption.Automatic;

httpClient = new HttpClient(handler);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM