HttpClient -返回的内容与浏览器不同
本文关键字:浏览器 返回 HttpClient | 更新日期: 2023-09-27 18:16:36
我正在尝试向kicksusa.com提出请求。如果我从任何浏览器发出请求,我将获得完整的预期HTML,但是,我似乎无法以返回相同HTML的方式模拟请求,而是得到"请求不成功"。的消息。
感谢您的帮助
我代码:HttpClientHandler httpClientHandler = new HttpClientHandler()
{
//Proxy = proxy,
AllowAutoRedirect = true,
MaxAutomaticRedirections = 15,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate | DecompressionMethods.None
};
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Host", "www.kicksusa.com");
client.DefaultRequestHeaders.Add("Connection", "keep-alive");
client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36");
client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, sdch");
client.DefaultRequestHeaders.Add("Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6");
var _response = await client.GetAsync("http://www.kicksusa.com/jordan-craig/oil-stain-slub-tee-army-green-8909ag.html");
if (_response.IsSuccessStatusCode)
{
var _html = await _response.Content.ReadAsStringAsync();
}
Fiddler trace header:
Host: www.kicksusa.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
本网站使用Incapsula的一些专用技术来防止对网站的自动访问。
在第一个请求中,站点返回一个嵌入iframe的web文档。只有当iframe源被加载时,才会设置cookie并重定向到该页面。所有进一步的请求都将立即成功,因为浏览器发送了cookie信息。
为了规避该机制,您必须在第一个请求后加载iframe,记住cookie,然后为所有进一步的请求发送cookie。还有很多JavaScript代码涉及到第一个答案,这可能必须执行Incapsula检查成功。
然而,当网站特别使用这种技术来阻止对其内容的自动访问时,任何试图绕过这种机制的尝试都必须被视为不希望的和犯罪行为。您不应该试图在未经网站所有者批准的情况下自动从网站收集数据,特别是当使用Incapusla等技术使这变得更加困难时。
请参阅Incapsula员工的回答了解更多详细信息。