Вот упрощенная версия моего кода для контекста.
Рабочий код< /p>
Этот код устанавливает заголовки с использованием sessionHeaders и дополнительных заголовков:
Код: Выделить всё
private Dictionary ExtractHeaders(HttpResponseMessage response)
{
var cookies = ExtractRelevantCookies(response);
var html = response.Content.ReadAsStringAsync().Result;
// Parse HTML to extract the CSRF token
var doc = new HtmlDocument();
doc.LoadHtml(html);
var csrfTokenNode = doc.DocumentNode.SelectSingleNode("//meta[@name='csrf-token']");
var csrfToken = csrfTokenNode?.Attributes["content"].Value;
var baseUri = some url;
// Return the headers as a dictionary
return new Dictionary
{
{ "Cookie", cookies },
{ "X-CSRF-Token", csrfToken },
{ "Referer", baseUri },
{ "Referrer-Policy", "strict-origin-when-cross-origin" },
{ "User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" },
{ "Cache-Control", "no-store" },
{ "Connection", "keep-alive" }
};
}
private async Task CheckDate(Dictionary sessionHeaders)
{
var url = $"{some url}";
_httpClient.DefaultRequestHeaders.Clear();
AddHeaders(sessionHeaders, _httpClient);
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_httpClient.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
var response = await _httpClient.GetAsync(url);
var responseData = await response.Content.ReadAsStringAsync();
return null;
}
Во втором подходе я вручную устанавливаю заголовки DefaultRequestHeaders, но это приводит на ошибку 404:
Код: Выделить всё
private Dictionary ExtractHeaders(HttpResponseMessage response)
{
var cookies = ExtractRelevantCookies(response);
var html = response.Content.ReadAsStringAsync().Result;
var doc = new HtmlDocument();
doc.LoadHtml(html);
var csrfTokenNode = doc.DocumentNode.SelectSingleNode("//meta[@name='csrf-token']");
var csrfToken = csrfTokenNode?.Attributes["content"].Value;
return new Dictionary
{
{ "Cookie", cookies },
{ "X-CSRF-Token", csrfToken }
};
}
private async Task CheckDate(Dictionary sessionHeaders)
{
var url = $"some url";
_httpClient.DefaultRequestHeaders.Clear();
// Manually add sessionHeaders
foreach (var header in sessionHeaders)
{
_httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
}
// Add additional headers
_httpClient.DefaultRequestHeaders.Add("Referer", some url);
_httpClient.DefaultRequestHeaders.Add("Referrer-Policy", "strict-origin-when-cross-origin");
_httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36");
_httpClient.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoStore = true };
_httpClient.DefaultRequestHeaders.Connection.Add("keep-alive");
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_httpClient.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
var response = await _httpClient.GetAsync(url);
var responseData = await response.Content.ReadAsStringAsync();
return null;
}
Что может быть причиной ошибки 404 при втором подходе? Существуют ли какие-либо потенциальные ошибки при настройке заголовков вручную в HttpClient?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-headers
Мобильная версия