HttpClient - 返回的内容与浏览器不同
HttpClient - Different content returned than browser
我正在尝试向 kicksusa.com 发出请求。如果我从任何浏览器发出请求,我都会得到完整的预期 HTML,但是,我似乎无法以 returns 与 HTML 相同的方式模拟请求,而是我得到了'Request unsuccessful.' 留言。
感谢任何帮助
我的代码:
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 跟踪 headers:
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 的一些专用技术来防止自动访问该网站。
根据第一个请求,站点 returns 一个带有嵌入式 iframe 的网络文档。只有当加载 iframe 源时,才会设置 cookie 并重定向到页面。由于浏览器发送了 cookie 信息,所有进一步的请求将立即成功。
为了规避该机制,您必须在第一个请求后加载 iframe,记住 cookie,然后为所有进一步的请求发送 cookie。第一个答案中还涉及很多 JavaScript 代码,可能必须执行这些代码才能使 Incapsula 检查成功。
但是,当网站专门使用此类技术来防止自动访问其内容时,任何试图规避此机制的行为都必须被视为不可取的行为,并视为犯罪行为。未经所有者批准,您不应尝试从站点自动收集数据,尤其是在使用 Incapusla 等技术使收集变得更加困难时。
另请参阅 this answer 一位 Incapsula 员工的详细信息。
我正在尝试向 kicksusa.com 发出请求。如果我从任何浏览器发出请求,我都会得到完整的预期 HTML,但是,我似乎无法以 returns 与 HTML 相同的方式模拟请求,而是我得到了'Request unsuccessful.' 留言。
感谢任何帮助
我的代码:
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 跟踪 headers:
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 的一些专用技术来防止自动访问该网站。
根据第一个请求,站点 returns 一个带有嵌入式 iframe 的网络文档。只有当加载 iframe 源时,才会设置 cookie 并重定向到页面。由于浏览器发送了 cookie 信息,所有进一步的请求将立即成功。
为了规避该机制,您必须在第一个请求后加载 iframe,记住 cookie,然后为所有进一步的请求发送 cookie。第一个答案中还涉及很多 JavaScript 代码,可能必须执行这些代码才能使 Incapsula 检查成功。
但是,当网站专门使用此类技术来防止自动访问其内容时,任何试图规避此机制的行为都必须被视为不可取的行为,并视为犯罪行为。未经所有者批准,您不应尝试从站点自动收集数据,尤其是在使用 Incapusla 等技术使收集变得更加困难时。
另请参阅 this answer 一位 Incapsula 员工的详细信息。