【问题标题】:Is it possible to generate headers automatically with HttpClient / RestSharp?是否可以使用 HttpClient / RestSharp 自动生成标头?
【发布时间】:2020-06-16 22:28:12
【问题描述】:

目前我正在使用以下 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?

这是两个 fiddler 响应的比较:https://imgur.com/a/bZo7d9F

【问题讨论】:

  • 你比较过这两个传出请求了吗?就像使用 Fiddler(或其他类似工具)捕获它们并并排比较它们。
  • @PeterCsala 我有,对我来说没有多大意义,但我可以看到 RestSharp 请求有一些安全标头,而 HttpClient 没有。
  • 能否将您的比较结果包含在问题中?那么,基于 HttpClient 的解决方案中缺少哪些。
  • 我指的是请求标头,而不是响应。 :D
  • Web 服务器不关心使用什么库来调用它。 Web 服务器看到的只是请求。因此,如果您比较请求,找出它们的不同之处,并使它们相同,那么服务器将相同地对待它们。这就是为什么建议使用 Fiddler。

标签: c# dotnet-httpclient restsharp


【解决方案1】:

在 HttpClient 的情况下,如果您想通过 DefaultRequestHeaders 手动传递 Cookie,那么您必须告诉 HttpClient 不要使用 CookieContainer。您必须使用HttpClientHandlerUseCookie 标志来表示它。

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

【讨论】:

    猜你喜欢
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多