[英]httpclient throw exception on redirect
我正在嘗試使用HttpClient下載網頁,這是我的代碼:
private async Task<string> _doRequest(string url)
{
string result = string.Empty;
var client = HttpClient;
using(var request = new HttpRequestMessage()
{
RequestUri = new Uri(url),
Method = HttpMethod.Get
}){
using (HttpResponseMessage response = client.SendAsync(request).Result)
if (response.Headers.Location == null)
{
using (HttpContent content = response.Content)
{
result = await content.ReadAsStringAsync();
}
}
else
{
result = await _doRequest(response.Headers.Location.ToString());
}
};
return result;
}
HttpClient是一個靜態變量,其初始化如下:
var handler = new HttpClientHandler();
handler.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
handler.AllowAutoRedirect = false;
HttpClient = new HttpClient(handler);
HttpClient.DefaultRequestHeaders.Add("User-Agent", @"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36");
當我嘗試使用url = "https://www.gls-italy.com/?option=com_gls&view=track_e_trace&mode=search&numero_spedizione=TE170187747&tipo_codice=nazionale"
執行代碼時
在這里我迷路了。 對我來說,它看起來像是帶有位置的有效302,但是由於某些原因,HttpClient認為不是,而是拋出異常。
最初需要明確的是,我依靠AllowAutoRedirect默認值並強制HttpClient進行重定向,但沒有成功,我遇到了相同的異常,導致我自己嘗試對其進行管理。 但是沒有成功。
有人知道發生了什么嗎? 如何使其運作?
提前致謝。
類級別的對象:
HttpClientHandler Http_Handler = new HttpClientHandler();
HttpClient Http_Client = new HttpClient();
CookieContainer HttpClCookieJar = new CookieContainer();
HttpClient安裝存根:
private void HttpClient_Setup()
{
Http_Handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
Http_Handler.AllowAutoRedirect = false;
Http_Handler.CookieContainer = HttpClCookieJar;
Http_Handler.UseCookies = true;
Http_Handler.UseDefaultCredentials = true;
Http_Client.Timeout = new TimeSpan(30000);
Http_Client = new HttpClient(Http_Handler);
Http_Client.DefaultRequestHeaders.Add("User-Agent", @"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0");
Http_Client.DefaultRequestHeaders.Add("Accept-Language", "it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3");
Http_Client.DefaultRequestHeaders.Add("Accept", "*/*");
Http_Client.DefaultRequestHeaders.Add("Cache-Control", "no-cache");
}
異步HttpClient請求:
public async Task<string> HttpClient_Request(string RequestURL)
{
string _responseHtml = string.Empty;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 |
SecurityProtocolType.Tls11 |
SecurityProtocolType.Tls12;
try
{
using (HttpRequestMessage _requestMsg = new HttpRequestMessage())
{
_requestMsg.Method = HttpMethod.Get;
_requestMsg.RequestUri = new Uri(RequestURL);
using (HttpResponseMessage _response = await Http_Client.SendAsync(_requestMsg))
{
using (HttpContent _content = _response.Content)
{
_responseHtml = await _content.ReadAsStringAsync();
};
};
};
}
catch (HttpRequestException eW)
{
Console.WriteLine("Message: {} Source: {1}", eW.Message, eW.Source);
}
catch (Exception eX)
{
Console.WriteLine("Message: {} Source: {1}", eX.Message, eX.Source);
}
return _responseHtml;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.