Как замаскировать ваш PHP-скрипт под браузер? - PullRequest
14 голосов
/ 15 ноября 2010

Мы уже давно используем информацию с сайта (что позволяет сайт, если вы упомянули источник, и мы это делаем), и мы копировали информацию вручную. Как вы можете себе представить, это может стать довольно утомительным, поэтому я пытался автоматизировать процесс, извлекая информацию с помощью PHP-скрипта.

URL-адрес, который я пытаюсь получить:

http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46 08-11-10 14-11-10

Если я введу его в браузер, он будет работать, если я попробую file_get_contents (), я получу Плохой запрос

Я подумал, что они проверили, является ли клиент браузером, поэтому я выбрал решение на основе CURL:

$ch = curl_init();

$header=array(
  'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12',
  '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',
  'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
  'Keep-Alive: 115',
  'Connection: keep-alive',
);

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt');
curl_setopt($ch,CURLOPT_COOKIEJAR,'cookies.txt');
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
$result=curl_exec($ch);

curl_close($ch);

Я проверил, и заголовки идентичны заголовкам моего браузера, и я все еще получаю Плохой запрос

Итак, я попробовал другое решение:

http://www.php.net/manual/en/function.curl-setopt.php#78046

К сожалению, это тоже не работает, и у меня нет идей. Чего мне не хватает?

Ответы [ 2 ]

12 голосов
/ 15 ноября 2010

Попробуйте экранировать свой URL, у меня так работает.

http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46%2008-11-10%2014-11-10
11 голосов
/ 15 ноября 2010

Использование curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12');

Конечно, вы можете заменить пользовательский агент другим.

Однако «Плохой запрос», скорее всего, НЕ связан с отсутствующим / плохим пользовательским агентом.Похоже, самому веб-серверу не нравится ваш запрос ... не приложение за запрошенным URI.

...