Я только что вошел в ядро .net из-за функций, которые он может предложить для HttpClient (например, установка заголовка keep-alive ограничена).
Я использую 2,1 чистое ядро и C # 7.3
Мой выпуск
Моя проблема касается установки заголовков «Accept» и «Accept-Language». Сайт, к которому я пытаюсь добраться, анализирует эти два заголовка как есть, то есть он должен иметь одинаковый точный формат (включая пробелы).
Использование фиддлера (и некоторых других инструментов) для получения моего запроса.
- Я фиксирую заголовок «Принять» следующим образом: (неверный формат)
text/html, application/xhtml+xml, application/xml; q=0.9, image/webp, image/apng, */*; q=0.8, application/signed-exchange; v=b3
вместо: (правильный формат)
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
- Заголовок «Accept-Language» в следующем виде: (неверный формат)
en-US, en; q=0.9, ar; q=0.8, und; q=0.7
Вместо: (правильный формат)
en-US,en;q=0.9,ar;q=0.8,und;q=0.7
Я моделирую запрос GET с помощью HttpClient с помощью HttpRequestMessage.
Что я пробовал
- Пробовал обе настройки моих заголовков в экземпляре HttpClient и запускает HttpRequestMessage со своими собственными заголовками, ни одна из них не работает.
- Перепробовал множество онлайн-решений, которые не работали, включая this
- Разделение заголовка на несколько
.Headers.TryAddWithoutValidation
- Также пробовал HttpWebRequests. Неудачно.
Стоит отметить, что из-за моего проекта мне также нравится придерживаться HttpClient.
Вы найдете ниже мой текущий код
var client = new HttpClient(new HttpClientHandler() { UseCookies = false,
AllowAutoRedirect = false,
Proxy = new WebProxy("localhost:8888") });
var httpReq = new HttpRequestMessage(HttpMethod.Get, $"myurl");
httpReq.Headers.TryAddWithoutValidation("Host", "myurl");
httpReq.Headers.TryAddWithoutValidation("Connection", "keep-alive");
httpReq.Headers.TryAddWithoutValidation("Cookie", $"cookie");
httpReq.Headers.TryAddWithoutValidation("Upgrade-Insecure-Requests", "1");
httpReq.Headers.TryAddWithoutValidation("User-Agent", Data.user_agent);
httpReq.Headers.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate, br");
httpReq.Headers.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
httpReq.Headers.TryAddWithoutValidation("Referer", Data.homeUrl);
httpReq.Headers.TryAddWithoutValidation("Accept-Language", "en-US,en;q=0.9,ar;q=0.8,und;q=0.7");
req = await client.SendAsync(httpReq);
Как отмечалось ранее, все остальные заголовки работают нормально. Только эти два Accept и Accept-Language вводятся по-разному.