Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpClient-返回的内容与浏览器不同_C#_Web Scraping_Dotnet Httpclient_Incapsula - Fatal编程技术网

C# HttpClient-返回的内容与浏览器不同

C# HttpClient-返回的内容与浏览器不同,c#,web-scraping,dotnet-httpclient,incapsula,C#,Web Scraping,Dotnet Httpclient,Incapsula,我正试图向kickusa.com提出请求。如果我从任何浏览器发出请求,我会得到完整的预期HTML,但是,我似乎无法以返回相同HTML的方式模拟请求,而是会收到一条“请求未成功”消息 谢谢你的帮助 我的代码: HttpClientHandler httpClientHandler = new HttpClientHandler() { //Proxy = proxy, AllowAutoRedirect = true, MaxAutomaticRedirections =

我正试图向kickusa.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跟踪头:

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

此网站使用来自的一些专用技术来防止自动访问该网站

在第一个请求中,站点返回一个带有嵌入式iframe的web文档。只有在随后加载iframe源时,才会设置cookie并重定向到页面。所有进一步的请求将立即成功,因为浏览器会发送cookie信息

为了绕过该机制,您必须在第一个请求之后加载iframe,记住cookie,然后为所有后续请求发送cookie。第一个答案中还包含大量JavaScript代码,可能必须执行这些代码才能使Incapsula检查成功

然而,当网站专门使用这种技术来阻止自动访问其内容时,任何试图绕过这种机制的行为都必须被视为不受欢迎的犯罪行为。未经网站所有者批准,您不应尝试自动从网站收集数据,尤其是在使用Incapusla等技术使这一过程变得更加困难时


有关更多详细信息,请参见Incapsula员工的文章。

使用Fiddler,并将每个请求作为在线序列化的请求进行比较。我已经完成了这项工作,但仍然不走运,请参见网站使用javascript加载所有内容的编辑,因此,即使您设法从浏览器中获得准确的响应,它也不会对您有多大帮助,因为它不会包含任何有用的信息(只是一个必须启用javascript的通知)。您需要呈现该站点(使用诸如CefSharp.OffScreen或任何其他工具)以执行其javascript。@Evk-我只需要一些位,如果您查看chrome的视图源,这些位确实可用。chrome的视图源显示已修改的页面,而不是从浏览器中的http请求获得的初始html。你到底需要从那一页中得到什么?