能否用HttpClient RestSharp自动生成头文件?

问题描述 投票:1回答:1

目前我正在使用下面的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.comsglaunchtair-max-90-orange-duck-camo

我的第一个问题是,HttpClient请求给我403错误,而RestClient请求却能正常工作。我如何解决这个问题?

我的第二个问题是,cookie在使用几次后就过期了,我必须手动从postman中获取一个新的cookie并插入。有没有办法让请求自己生成cookie?

下面是两个fiddler的响应对比。https:/imgur.comabZo7d9F

c# dotnet-httpclient restsharp
1个回答
1
投票

在HttpClient的情况下,如果你想通过手动传递Cookie DefaultRequestHeaders 然后你必须告诉HttpClient不要使用CookieContainer。你必须使用 HttpClientHandler's 使用Cookie 标志来表示。

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);
© www.soinside.com 2019 - 2024. All rights reserved.