重定向页面时,HttpWebRequest 和 Restsharp 不 return 响应

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;

但是,情况是一样的,发送了请求,但是一直没有收到响应,超时结束。

编辑 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();

之前也会超时

该问题与 .NET 或反向代理无关,而是与相关站点永远阻止 HTTP 请求这一事实有关,除非存在以下 HTTP headers 并具有值:

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);
}

将来,使用浏览器的网络请求控制台 and/or 像 Fiddler 这样的工具来检查 HTTP 请求有效与无效的情况。