本人在改造舊項目時遇到一個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);
