[英]HttpWebRequest and Restsharp do not return response when the page is redirected
我嘗試創建簡單的控制台應用程序,在其中向 url 發送請求並讀取收到的響應代碼:
HttpWebRequest 實現
HttpWebRequest init = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)init.GetResponse();
Console.WriteLine(resp.StatusCode);
RestSharp 實現
var client = new RestClient(url);
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.StatusCode);
在大多數情況下,它工作得很好。 但是當網站重定向到另一個頁面或端口時(通常是用 .net 編寫的頁面,帶有反向代理,例如https://www.eventim.pl/
),程序會嘗試發送請求,但從未得到任何響應。
我嘗試使用:
//HttpWebRequest
init.AllowAutoRedirect = true;
//RestSharp
client.FollowRedirects = true;
但是,情況是一樣的,請求發送了,但從來沒有收到響應,以超時結束。
編輯我: HttpClient 實現
HttpClient client = new HttpClient();
try
{
HttpResponseMessage response = await client.GetAsync("https://www.eventim.pl");
response.EnsureSuccessStatusCode();
var res = response.StatusCode;
Console.WriteLine((int)res);
}
catch (HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
}
在這種情況下,它也會在達到response.EnsureSuccessStatusCode();
之前超時。
該問題與 .NET 或反向代理無關,並且與相關站點永久阻止 HTTP 請求這一事實有關,除非存在以下 HTTP 標頭並具有值:
Accept
Accept-Encoding
Accept-Language
例如,對您的代碼進行以下修改幾乎會立即產生 200 響應:
var client = new HttpClient();
try
{
var request = new HttpRequestMessage(HttpMethod.Get, "https://www.eventim.pl");
request.Headers.Add("Accept", "text/html");
request.Headers.Add("Accept-Encoding", "gzip, deflate, br");
request.Headers.Add("Accept-Language", "en");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var res = response.StatusCode;
Console.WriteLine((int)res);
}
catch (Exception e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message: {0}", e.Message);
}
將來,請使用瀏覽器的網絡請求控制台和/或 Fiddler 之類的工具來檢查 HTTP 請求有效與無效的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.