Как узнать, какие заголовки HttpClient использовать?

Я немного в растерянности относительно того, как подойти к этому вопросу. Название говорит само за себя. Когда я пытаюсь очистить html с сайта, получаю исключение SocketException. Мне удалось выяснить, что это как-то связано с заголовками, но я понятия не имею, какие заголовки я должен использовать при различных обстоятельствах. У меня есть следующее:

    private async void parseHtml(string url)
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(url);
        var html = await client.GetStringAsync(url); //SocketException here

        //Parse html, etc.
    }

"Мне удалось выяснить, что это как-то связано с заголовками" -- Как? Что вы видели, что вы делали, и как это изменило то, что вы видели?

canton7 21.03.2019 13:35

«SocketException здесь» — что такое полное сообщение об исключении и трассировка стека?

canton7 21.03.2019 13:35

Основные заголовки, которые вам нужны, уже будут добавлены HttpClient. Все остальное сводится к требованиям отдельного сервера. Иногда сервер принимает ограниченный диапазон значений User-Agent, например, предположительно, чтобы затруднить соскребание волос.

Llama 21.03.2019 13:44

Сравните работающее приложение на сервере с вашим приложением, используя сниффер, такой как wireshark или fiddler. Каждый сервер уникален, и без документации по серверу вы можете гадать. HttpClient не очень умен и добавляет к запросу очень мало заголовков. Обычно я пробую IE и смотрю, работает ли он. Затем используйте сниффер, чтобы получить рабочие заголовки.

jdweng 21.03.2019 13:51

@canton7 SocketException: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или установленное соединение не удалось, потому что подключенный хост не ответил. В трассировке не было ничего полезного. Я только что заметил, что люди будут устанавливать свои собственные заголовки.

Max 21.03.2019 13:58

И вы получаете это SocketException по URL-адресу, который вы можете успешно запросить в браузере?

canton7 21.03.2019 13:59

@Джон, я этого не знал. Я предполагал, что он не отправляет никаких заголовков. Я добавил заголовок для аналогичной страницы, которая решила мою проблему, но не повезло для другой страницы. client.DefaultRequestHeaders.Add("Принять", "text/html,application/xhtml+xml,application/xml;q=0.9,image‌​/webp,image/apng,/;q‌​=0.8");

Max 21.03.2019 13:59

@кантон это правильно

Max 21.03.2019 14:00

Вы пытались добавить заголовок User-Agent, как сказал @John?

canton7 21.03.2019 14:02

@jdweng, это очень полезно знать. Похоже, тогда я мог бы просто пойти на wireshark, но тогда все еще остается вопрос, как браузер будет отправлять правильные заголовки.

Max 21.03.2019 14:03

@Max это меньше «браузер отправляет правильные заголовки» и больше «браузеры отправляют стандартный набор заголовков, и веб-сайты могут ожидать эти заголовки»

canton7 21.03.2019 14:04

Но «Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время» означает, что вам так и не удалось установить соединение. Неважно, какие заголовки вы пытаетесь отправить, потому что вам никогда не удавалось их отправить, как вам никогда не удавалось подключиться.

canton7 21.03.2019 14:04

@canton7 дело в том, что я получал то же сообщение до добавления заголовка для страницы, которую удалось загрузить. Я попытался отправить добавление заголовка пользовательского агента, но это не сработало. Я использовал whatismybrowser.com/detect/…, чтобы получить некоторые заголовки, но попробую добавить остальные и посмотреть, поможет ли это.

Max 21.03.2019 14:13

Браузер по умолчанию использует больше заголовков, чем Net Library для HttpRequest.

jdweng 21.03.2019 14:24

Итак, похоже, что после того, как я добавил следующие 3 заголовка, он заработал: ,изображение/apng,/;q‌​=0,8"); client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br"); client.DefaultRequestHeaders.Add("Accept-Language", "en;q=0.9"); Хотя догадаться и проверить все еще хлопотно

Max 21.03.2019 14:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
15
29
0

Другие вопросы по теме