本人在改造舊專案時遇到一個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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/175381.html
標籤:.NET技术
