是否可以使用HttpClient / RestSharp自动生成标头?

时间:2020-06-16 11:25:11

标签: c# dotnet-httpclient restsharp

此刻,我正在使用以下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请求工作正常。我该如何解决?

我的第二个问题是cookie多次使用后会失效,我必须从邮递员那里手动获取一个新cookie并将其插入。无论如何,请求是否会生成自己的Cookie?

以下是比较的两个提琴手响应:https://imgur.com/a/bZo7d9F

1 个答案:

答案 0 :(得分:1)

在使用HttpClient的情况下,如果您想手动通过DefaultRequestHeaders传递Cookies,则必须告诉HttpClient不要使用CookieContainer。您必须使用HttpClientHandler的{​​{3}}标志进行指示。

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);