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 для более подробной информации.