Метод HttpWebRequest.GetResponse застрял для определенных URL - PullRequest
0 голосов
/ 20 сентября 2018

Рассмотрим следующий URL: "http://www.bestbuy.com". Этот ресурс быстро и корректно загружается во все браузеры и из всех мест.

Однако базовый код C # в настоящее время зависает (заканчивается тайм-аутом для любого тайм-аута) для этого URL:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

var req = WebRequest.CreateHttp("http://www.bestbuy.com");
req.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36";
req.Timeout = 30000; // you can set any timeout

using (var resp = (HttpWebResponse)req.GetResponse()) // stucks and finally ends by timeout here
{
    Console.WriteLine(resp.StatusCode);
    Console.WriteLine(resp.ResponseUri.AbsoluteUri);
}

Fiddle: https://dotnetfiddle.net/M7NZgG

Этот же код отлично работает для большинства других URL.

Пробовал разные вещи, но все они сделалине помогает:

  • прямая загрузка версии HTTPS ("https://www.bestbuy.com")
  • удалить вызовы для установщиков UserAgent, AutomaticDecompression и SecurityProtocol

класс HttpClient также зависаети заканчивается таймаутом для этого ресурса.

В Fiddler ответ быстро возвращается, но выглядит странно - он совершенно пустой: Fiddler bestbuy

1 Ответ

0 голосов
/ 20 сентября 2018

я на 10 представителей меньше комментариев, где этот ответ должен быть, поэтому, пожалуйста, не голосуйте, мне просто интересно, вы пытались ожидать: 100-продолжить?по крайней мере, это задержит распространение вашего ответа на два ответа, возможно, сообщив вам больше информации.

...