Is it possible to generate headers automatically with HttpClient / RestSharp?
目前,我正在使用以下RestSharp请求来获取网站的内容:
1 2 3 4 5
| 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属性:
1 2 3 4 5
| 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
-
您是否比较了两个外发请求?就像使用Fiddler(或某些类似工具)捕获它们并并排比较它们。
-
我拥有@PeterCsala,对我来说意义不大,但我可以看到RestSharp请求具有一些安全标头,而HttpClient没有。
-
能否将您的比较结果包含在问题中?因此,基于HttpClient的解决方案中缺少哪些。
-
@PeterCsala我编辑了包含提琴手比较的imgur链接:)
-
我的意思是请求标头,而不是响应。 :D
-
糟糕的是,我仅有的头是cookie头,仅此而已。但是,RestSharp可以工作,而另一个则不能_(ツ)_ / @PeterCsala
-
Web服务器不在乎正在使用哪个库来调用它。 Web服务器看到的只是请求。因此,如果您比较请求,找出它们有什么不同,并使它们相同,则服务器将对它们进行相同的处理。这就是为什么建议使用Fiddler的原因。
对于HttpClient,如果您想通过DefaultRequestHeaders手动传递Cookies,则必须告诉HttpClient不要使用CookieContainer。 您必须使用HttpClientHandler的UseCookie标志进行指示。
1 2 3 4 5
| 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 ); |