2012-07-03 3 views
0

Я надеюсь, вы сможете мне помочь. Сайт в настоящее время онлайн, и я могу получить к нему доступ в порядке, я не могу понять, почему это не работает.Ответ заголовка «403 Запретный» с cURL, file_get_contents() и fopen()

file_get_contents() и fopen() возвращает ошибку говоря следующее:

PHP Warning: file_get_contents(http://www.hackforums.net): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /host/Users/Phizo/Desktop/stalker.php on line 29 

Теперь я только начал принимать до Curl, так как я хотел, чтобы попытаться обойти это 403, также не повезло.

$handle = curl_init(); 
$file = fopen('source.txt', 'w'); 

curl_setopt($handle, CURLOPT_URL, 'http://www.hackforums.net/'); 
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'GET'); 
curl_setopt($handle, CURLOPT_HEADER, true); 
curl_setopt($handle, CURLOPT_AUTOREFERER, true); 
curl_setopt($handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1'); 
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($handle, CURLOPT_FILE, $file); 

curl_exec($handle); 

print_r(curl_getinfo($handle)); 

curl_close($handle); 
fclose($file); 

Выводит следующее сообщение об ошибке:

Fatal error: Maximum execution time of 30 seconds exceeded in D:\Hosting\6514439\html\zeonsglobal\admin\press_uploads\stalker.php on line 29 

ответ

3

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

$handle = curl_init(); 

curl_setopt($handle, CURLOPT_URL, 'http://www.hackforums.net/'); 
curl_setopt($handle, CURLOPT_HEADER, true); 
curl_setopt($handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1'); 
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec($handle); 

var_dump($result); 

curl_close($handle); 

Вероятная причина, по которой вы получали 403, была из-за того, что пользовательский агент пропускал fopen. Если вы удалите пользовательский агент из запроса на завивание, вы также получите ошибку 403.

Я добавил параметр curl CURLOPT_RETURNTRANSFER, чтобы он возвращал ответ в строке при вызове curl_exec().

Надеюсь, что это поможет.

+0

Это не сработало для меня, однако мне удалось решить проблему, используя stream_context_create(). Похоже, что fopen передавал пользовательский агент «PHP» так же, как вы сказали. Поэтому вы помогли мне придумать способ сделать это, спасибо :). – user1488335

Смежные вопросы