0
System.Net.Http

Как правильно формировать заголовки при обращении к сайтам с помощью HttpClient чтобы они показали документ такой же - как показывают браузеру ?

  • Ведь если я какие то заголовки не укажу, он может показать какой то другой документ или вовсе выдать мне ошибку.

Я думал это делать вручную, указывая конкретные заголовки:

client.DefaultRequestHeaders.Add("", "");

Попытался разобраться глубже:

  • Проверяю через браузер разные сайты и через консоль наблюдаю, что браузер использует абсолютно рандомные заголовки в запросе. Чего я руками точно не повторю.

Yandex:

Host: yandex.ru
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: Были куки
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
TE: Trailers

Mail:

Host: limg.imgsmail.ru
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: text/css,*/*;q=0.1
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://mail.ru/

Так вот как HttpClient может определять какие заголовки тому или иному сайту нужны и как это делает браузер ?

Если у меня будет 50 сайтов - не смогу же я под них заголовки руками повторять)

Xzizz
  • 1,592
  • 1
    А что сайт может не так выдать вам? Отправляйте правильный UserAgent, Referer, да и все, 99% сайтов выдадут вам все. Остальные же заголовки нужны лишь в единичных случаях, например Accept-Language - некоторые сайты через него проверяют какой язык страницы ставить для пользователя, либо есть Content-Type, которые тоже некоторые сайты обрабатывают и через него можно получить html/xml/json и др. форматы данных. Есть еще x заголовки, которые тоже часто используются сайтами для передачи чего либо. Вообще, первоначально с браузера отправляется это. – EvgeniyZ Dec 07 '19 at 13:00
  • @EvgeniyZ - оО - здорово что именно вы обратили внимание на этот вопрос, я как раз изучая HttpClient - учусь на ваших примерах) 1 и 2

    Проблема в том, что запихнув 50 сайтов, многие принудительно отклоняют Get запросы - не могу разобраться почему. Указываю User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0 и вот сайт для примера: случайный) браузеру доступный, httpclient выдаёт исключение.

    – Xzizz Dec 07 '19 at 13:27
  • 1
    Какую ошибку? Вот набросал за минуту пример, запустил и получил это. Как видите даже без заголовков и чего либо еще мне выдало полный контент страницы. – EvgeniyZ Dec 07 '19 at 13:36
  • @EvgeniyZ Не могут же у меня при первом запросе к странице быть Referer и Cookie с помощью HttpClient - собственно как и у браузера. Что же тогда не пускает ? Перепробовал все заголовки кроме Referer и Cookie повторить - не пускает. Или для браузера при первом запросе к серверу он видит что нет Cookie и Referer, присваивает их и делает редирект чтобы проверить ? – Xzizz Dec 07 '19 at 13:39
  • 1
    Cookie используются в основном для авторизации, либо для защиты от подделки ответа. Предоставленный вами сайт не имеет чего либо. Я без понятия чего у вас там происходит, ибо как видите без заголовков и "печенек" сайт отдает мне контент. Вы кстати так и не сказали что за ошибка у вас. Ну а вообще, вы можете установить Fiddler и через него смотреть что отправляет ваше приложение и что отправляет браузер и так ищите виновника, ибо может у вас в браузере какое то расширение стоит для обхода блокировок каких то, может еще чего. Увы, я тут без заблокированного сайта вам помочь не смогу... – EvgeniyZ Dec 07 '19 at 13:45
  • @EvgeniyZ пока писал) вы уже тест провели) Вот мой пример - что не так) https://prnt.sc/q7jdip – Xzizz Dec 07 '19 at 13:49
  • @EvgeniyZ вы виртуоз), действительно всё дело в расширении у браузера именно с этим сайтом, а я думал что то не так делаю( – Xzizz Dec 07 '19 at 13:55
  • @EvgeniyZ отключив расширение - выдал браузеру https://prnt.sc/q7jgmv – Xzizz Dec 07 '19 at 14:01
  • 1
    Ну тут либо у вас стоит блокировка у провайдера на данный сайт, либо у вас что то не так настроено, либо всеми любимый РКН старается (а он сейчас ох как за аниме взялся), либо у вас используется что то старое (браузер/в проекте старый .Net). Вот нарыл в интернете информацию, может поможет. Ну а так, это индивидуальный случай, это не проблема в заголовках и запросах) – EvgeniyZ Dec 07 '19 at 14:21

0 Answers0