C # первый http-запрос (HttpClient / WebClient / WebRequest) занимает много времени (60 секунд) на некоторых сайтах?

#c# #.net #https #httpclient #webclient

#c# #.net #https #httpclient #webclient

Вопрос:

Я пытаюсь загрузить различные сайты, чтобы получить некоторую информацию на C #, но есть довольно много сайтов (не все), где первый запрос занимает 30-60 секунд.

В качестве примера;

 var url = "https://www.coolermaster.com/catalog/cases/mid-tower/masterbox-k501l";
using var wc = new WebClient();
Console.WriteLine(wc.DownloadString(url));
 

Это будет последовательно занимать 30-60 секунд каждый раз, когда я впервые запускаю приложение, fiddler говорит, что соединение остается в состоянии «ПОДКЛЮЧИТЬСЯ», но затем в конечном итоге возвращает содержимое страницы.

Я пытался использовать HttpClient (и отключать прокси через HttpClientHandler ), используя HttpClientFactory , используя WebRequest.Create , но безуспешно.

Если я использую какие-либо инструменты командной строки (cURL, wget), он возвращается мгновенно, также мгновенно выполняет запросы с других языков (JS / Ruby / PHP / Python), но в .NET не повезло, даже если я отправляю те же заголовки, что и другие инструменты. Пробовал на разных компьютерах, разных подключениях к Интернету, vps и т. Д.

Ни один из этих сайтов не блокирует ботов, это явно разрешено robots.txt .

Я столкнулся с какой-то ошибкой или есть какой-то вариант, который мне не хватает? Похоже, это связано с медленным рукопожатием SSL, но я не уверен?

Комментарии:

1. @Heagon спасибо, но эта ссылка не отвечает на мой вопрос. Это не просто медленный WebClient, это все методы, которые я пробовал в .NET (WebClient / HttpClient / WebRequest), и это только на некоторых сайтах.

2. Я подозреваю, что проблема заключается в разрешении dns. Я бы предположил, что на вашем компьютере установлено несколько DNS-серверов, первый из которых не работает.

3. Также может быть связано с истечением времени ожидания запроса IPv6.