Возможно ли автоматическое создание заголовков с помощью HttpClient / RestSharp? - PullRequest
1 голос
/ 16 июня 2020

В настоящий момент я использую следующий запрос RestSharp для получения содержимого веб-сайта:

        var client = new RestClient(productLink);
        var request = new RestRequest(Method.GET);
        request.AddHeader("Cookie", "insert-cookie-content"); 
        IRestResponse response = client.Execute(request);
        Console.WriteLine(response.Content);

Я попытался преобразовать его в HttpClient, так как позже мне потребуется использовать свойство AllowRedirect:

        var client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Add("Cookie", "insert-cookie-content");
        var response = await client.GetAsync(productUrl);
        Console.WriteLine(response);

URL-адрес, по которому я пытаюсь получить ответ: https://www.nike.com/sg/launch/t/air-max-90-orange-duck-camo

Моя первая проблема заключается в том, что запрос HttpClient дает мне 403 ошибки, тогда как запрос RestClient был работает нормально. Как я могу это исправить?

Моя вторая проблема заключается в том, что у повара ie истекает срок действия после нескольких использований, и мне нужно вручную получить новый у почтальона и вставить его. Есть ли способ, чтобы запрос сгенерировал свой собственный повар ie?

Вот сравниваются два ответа скрипача: https://imgur.com/a/bZo7d9F

1 Ответ

1 голос
/ 16 июня 2020

В случае HttpClient, если вы хотите передать файлы cookie вручную через DefaultRequestHeaders, вы должны сообщить об этом HttpClient НЕ использовать CookieContainer. Вы должны использовать HttpClientHandler флаг UseCook ie, чтобы указать это.

var client = new HttpClient(new HttpClientHandler { UseCookies = false });
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Add("Cookie", "insert-cookie-content");
var response = await client.GetAsync(productUrl);
Console.WriteLine(response);
...