我嘗試創建簡單的控制臺應用程式,在那里我向 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;
但是,情況是一樣的,發送了請求,卻始終沒有收到回應,以超時結束。
編輯 I: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();
uj5u.com熱心網友回復:
該問題與 .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 請求有效與無效的情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/376634.html
