curl не работает для получения содержимого веб-страницы, почему? - PullRequest
2 голосов
/ 02 мая 2009

Я использую скрипт curl, чтобы перейти на ссылку и получить ее содержимое для дальнейшей манипуляции. Ниже приведена ссылка и скрипт curl:

<?php 
$url = 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&amp;templateName=detail.htm&amp;requestingHandler=WebNSORDetailHandler&amp;ID=368343543';

//curl script to get content of given url

$ch = curl_init();

// set the target url

curl_setopt($ch, CURLOPT_URL,$url);

// request as if Firefox

curl_setopt($ch, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); 
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result= curl_exec ($ch);
curl_close ($ch);
echo $result;
?>

но веб-сайт не исключает его с помощью скрипта, он дает пользователю исключение в результате, но если мы обычно вставляем URL в браузер, это открывает страницу совершенно нормально.

Пожалуйста, помогите, что я здесь не так делаю.

Спасибо и всего наилучшего

Ответы [ 4 ]

5 голосов
/ 02 мая 2009

Я запустил следующую программу / скрипт и страница была загружена правильно. Скорее всего, это означает, что сервер, с которого вы запускаете ваш скрипт, не может связаться с сервером по адресу Criminaljustice.state.ny.us. Это либо потому, что ваш сервер неверно настроен, либо их сервер явно блокирует вас, что является частым результатом агрессивной очистки экрана.

<?php
$url = 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&templateName=detail.htm&requestingHandler=WebNSORDetailHandler&ID=368343543';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); 
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result= curl_exec ($ch);
curl_close ($ch);
echo $result;

Дополнительный совет по устранению неполадок - если у вас есть доступ к оболочке на компьютере, с которого запускается PHP-скрипт, выполните следующую команду

curl -I 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&templateName=detail.htm&requestingHandler=WebNSORDetailHandler&ID=368343543'

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

2 голосов
/ 24 февраля 2012

У меня была та же проблема, которая в конечном итоге была не установлена ​​опция followlocation. Я думал, что curl установит его в true по умолчанию, но я думаю, нет !? Как только я установил его, он получил полный сайт без проблем

2 голосов
/ 02 мая 2009

Для useragent я думаю, что вы хотите использовать константу CURLOPT_USERAGENT

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
1 голос
/ 02 мая 2009

Агент пользователя должен быть в таком массиве? Я раньше такого не видел.

Попробуйте просто использовать простую строку, т.е.

curl_setopt($ch, CURLOPT_HTTPHEADER, 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15'); 
...