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 сайтов - не смогу же я под них заголовки руками повторять)
UserAgent,Referer, да и все, 99% сайтов выдадут вам все. Остальные же заголовки нужны лишь в единичных случаях, напримерAccept-Language- некоторые сайты через него проверяют какой язык страницы ставить для пользователя, либо естьContent-Type, которые тоже некоторые сайты обрабатывают и через него можно получить html/xml/json и др. форматы данных. Есть ещеxзаголовки, которые тоже часто используются сайтами для передачи чего либо. Вообще, первоначально с браузера отправляется это. – EvgeniyZ Dec 07 '19 at 13:00Проблема в том, что запихнув 50 сайтов, многие принудительно отклоняют
– Xzizz Dec 07 '19 at 13:27Getзапросы - не могу разобраться почему. УказываюUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0и вот сайт для примера: случайный) браузеру доступный,httpclientвыдаёт исключение.RefererиCookieс помощьюHttpClient- собственно как и у браузера. Что же тогда не пускает ? Перепробовал все заголовки кромеRefererиCookieповторить - не пускает. Или для браузера при первом запросе к серверу он видит что нетCookieиReferer, присваивает их и делает редирект чтобы проверить ? – Xzizz Dec 07 '19 at 13:39Cookieиспользуются в основном для авторизации, либо для защиты от подделки ответа. Предоставленный вами сайт не имеет чего либо. Я без понятия чего у вас там происходит, ибо как видите без заголовков и "печенек" сайт отдает мне контент. Вы кстати так и не сказали что за ошибка у вас. Ну а вообще, вы можете установить Fiddler и через него смотреть что отправляет ваше приложение и что отправляет браузер и так ищите виновника, ибо может у вас в браузере какое то расширение стоит для обхода блокировок каких то, может еще чего. Увы, я тут без заблокированного сайта вам помочь не смогу... – EvgeniyZ Dec 07 '19 at 13:45