php get request возвращает пустой - PullRequest
0 голосов
/ 15 ноября 2011

file_get_contents возвращает пустую строку в URL: http://thepiratebay.org/search/a

, когда она явно не пустая.также попробовал curl, вот мой код

$ch = curl_init();
$cookieFile = 'cookies.txt';
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');

$url = 'http://thepiratebay.org/search/a';
curl_setopt($ch, CURLOPT_URL,$url);

$html = curl_exec ($ch);
var_dump($html);
$html = file_get_contents($url);
var_dump($html);

curl_close ($ch); unset($ch);

вывод:

string(143) "HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.8
Content-type: text/html
Content-Length: 0
Date: Mon, 14 Nov 2011 20:27:01 GMT
Server: lighttpd

"
string(0) ""

если я изменю URL на "http://thepiratebay.org/search", удалив 2 символа, все в порядке, и я получаю хорошийответ.

есть идеи?

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Проблема в том, что вы пытаетесь установить строку агента пользователя, используя CURLOPT_TIMEOUT.Попробуйте использовать CURLOPT_USERAGENT, и это должно решить вашу проблему.Вы можете сделать то же самое время, используя stream_context_create или ini_set, если вы предпочитаете использовать file_get_contents.

Пример для всех трех методов доступенв http://www.seopher.com/articles/how_to_change_your_php_user_agent_to_avoid_being_blocked_when_using_curl.

0 голосов
/ 15 ноября 2011

file_get_contents, возможно, не сможет открыть URL-адреса в вашей установке.См. fopen_wrappers .Или thepiratebay.org может блокировать вас из-за пользовательского агента на вызове file_get_contents.Попробуйте передать контекст .Или, может быть, он ничего не возвращает, потому что вы не отправляете куки в вашем file_get_contents звонке, как если бы вы curl.Итог, хотя URL-адреса одинаковы, запросы разные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...