Не удается загрузить веб-страницу в .net - PullRequest
0 голосов
/ 26 марта 2019

Я сделал партию, которая анализирует html-страницу gearbest.com для извлечения данных об элементах (пример ссылки ссылка ). Работало до 2-3 недели назад, после чего сайт обновился. Поэтому я не могу загрузить страницы для анализа и не понимаю почему. Перед обновлением я сделал запрос со следующим кодом с HtmlAgilityPack.

HtmlWeb web = new HtmlWeb();    
HtmlDocument doc = null;    
doc = web.Load(url); //now this the point where is throw the exception

Я пробовал без фреймворка и добавил некоторую дату в запрос

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("https://it.gearbest.com/tv-box/pp_009940949913.html");
request.Credentials = CredentialCache.DefaultCredentials;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36";
request.ContentType = "text/html; charset=UTF-8";
request.CookieContainer = new CookieContainer();
request.Headers.Add("accept-language", "it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7");
request.Headers.Add("accept-encoding", "gzip, deflate, br");
request.Headers.Add("upgrade-insecure-requests", "1");
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
request.CookieContainer = new CookieContainer();

Response response = request.GetResponse();  //exception

Исключение составляет:

  • IOException: невозможно прочитать данные из транспортного соединения
  • SocketException: не удалось установить соединение.

Если я пытаюсь запросить главную страницу (https://it.gearbest.com), это работает.

В чем проблема на ваш взгляд?

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Почему-то не нравится предоставленный пользовательский агент. Если вы пропустите настройку UserAgent все работает нормально

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("https://it.gearbest.com/tv-box/pp_009940949913.html");
request.Credentials = CredentialCache.DefaultCredentials;
//request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36";
request.ContentType = "text/html; charset=UTF-8";

Другим решением будет установка request.Connection на случайную строку (но не keep-alive или close)

request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36";
request.Connection = "random value";

Это тоже работает, но я не могу объяснить, почему.

0 голосов
/ 26 марта 2019

Может быть стоит попробовать ...

HttpRequest.KeepAlive = false; 
HttpRequest.ProtocolVersion = HttpVersion.Version10;

https://stackoverflow.com/a/16140621/1302730

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...