Мы используем информацию с сайта некоторое время (что-то, что позволяет сайт, если вы упомянули об источнике, и мы это делаем), и мы копировали информацию вручную. Как вы могли себе представить, это может стать утомительным довольно быстро, поэтому я пытаюсь автоматизировать процесс, извлекая информацию с помощью PHP-скрипта.
URL-адрес, который я пытаюсь получить, следующий:
http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46 08-11-10 14-11-10
Если я ввожу его в браузер, он работает, если я попробую файл_get_contents (), я получаю Bad Request
Я решил, что они проверили, является ли клиент браузером, поэтому я применил решение на основе 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);
Я проверил, и заголовки идентичны заголовкам моего браузера, и я все равно получаю Bad Request
Поэтому я попробовал другое решение:
http://www.php.net/manual/en/function.curl-setopt.php#78046
К сожалению, это тоже не работает, и у меня нет идей. Что мне не хватает?
Попробуйте ускользнуть от своего URL-адреса, это работает для меня именно так.
http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46%2008-11-10%2014-11-10
Используйте 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');
Вы, конечно же, можете заменить useragent другим.
Однако «плохой запрос», скорее всего, НЕ связан с отсутствующим / плохим пользовательским агентом. Похоже, что веб-сервер не любит ваш запрос, а не приложение за запрошенным URI.