сначала получите все заголовки, которые отправляет ваш реальный браузер, это можно получить, запустив сервер netcat, например
nc -l 9999
, затем укажите браузер на свой сервер netcat на http://127.0.0.1:9999/
теперь вы увидите все заголовки, отправленные вашим реальным браузером, это выглядит примерно так:
GET / HTTP/1.1
Host: 127.0.0.1:9999
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
, затем скопируйте все заголовки, за исключением нескольких специальных, во-первых, не копируйтеЗаголовок GET / HTTP/1.1
, пусть curl устанавливает его для вас (он будет), и не копирует заголовок "Host", но пусть curl устанавливает его для вас (он будет) и не копирует заголовок User-Agent
, вместо этого установитеэто с помощью функции CURLOPT_USERAGENT (в противном случае ваш настоящий UA будет раскрыт, если вы будете следовать перенаправлению или что-то еще, но если вы используете правильный CURLOPT_USERAGENT, ваш настоящий UA не будет раскрыт), и не копируйте Accept-Encoding: gzip, deflate
-header, но вместо этого установите CURLOPT_ENCODING
в значение emptystring, это заставит curl установить заголовок Accept-Encoding для вас вручную со всеми кодировками, которые поддерживал ваш libcurl (обычно это gzip
иdeflate
, но curl также может быть построен с поддержкой br
, например. но если вы установите заголовок вручную на gzip, а сервер решит использовать gzip, и ваш libcurl будет скомпилирован без поддержки gzip (маловероятно, но возможно), вы получите нечитаемые искаженные двоичные данные ), тогда вы 'Возможно, у меня останется что-то вроде:
<?php
$ch=curl_init();
curl_setopt_array($ch,array(
CURLOPT_URL=>'http://www.fanatics.com/nfl/green-bay-packers/aaron-rodgers-green-bay-packers-nike-game-jersey-green/o-2405+t-36485721+p-3102729373+z-9-2995349525',
CURLOPT_USERAGENT=>'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0',
CURLOPT_ENCODING => '', // Accept-Encoding: gzip, deflate
CURLOPT_HTTPHEADER=>array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.5',
'Connection: keep-alive',
'Upgrade-Insecure-Requests: 1',
),
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_FOLLOWLOCATION=>true,
));
$html=curl_exec($ch);
var_dump($html);
, которое действительно работает. не все эти заголовки требуются, и чтобы точно определить, какой заголовок требуется, просто удалите заголовки 1 к 1, пока скрипт не перестанет работать, и вы найдете его: последний удаленный заголовок, вероятно, был заголовком, которыйбыл необходим.