HttpClient - другой контент возвращается, чем браузер

Я пытаюсь сделать запрос на 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:

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

1 ответ

Решение

Этот сайт использует некоторые специальные технологии Incapsula для предотвращения автоматического доступа к сайту.

По первому запросу сайт возвращает веб-документ со встроенным фреймом. Только когда источник iframe загружен, устанавливается cookie и происходит перенаправление на страницу. Все дальнейшие запросы будут немедленно выполнены, потому что браузер отправит информацию о куки.

Чтобы обойти механизм, вам нужно будет загрузить iframe после первого запроса, запомнить файл cookie и затем отправить файл cookie для всех дальнейших запросов. В первом ответе также содержится много кода JavaScript, который, вероятно, должен был бы быть выполнен, чтобы проверка Incapsula прошла успешно.

Однако, когда сайт специально использует такую ​​технологию для предотвращения автоматического доступа к своему контенту, любая попытка обойти этот механизм должна рассматриваться как нежелательная и как преступный акт. Вы не должны пытаться автоматически собирать данные с сайта без согласия его владельца, особенно если такая технология, как Incapusla, используется для того, чтобы сделать это более трудным.

Смотрите также этот ответ сотрудника Incapsula для более подробной информации.

Другие вопросы по тегам