PHP curl exec не работает на PHP-скрипте того же домена - PullRequest
5 голосов
/ 26 февраля 2011

Я использую php curl для получения контента из php-скрипта в том же доменном URL.Но я получаю ошибку curl_exec.Код ошибки скручивания равен 28 или истекло время ожидания операции.После нескольких дней отладки я обнаружил, что он работает на не скриптовой странице, такой как htm, но не на php, он также работает, если URL-адрес является скриптом в другом домене.Я отлаживал в течение нескольких дней и не нашел решений.Помогает оценить.

<code>$url = 'http://...';
$agent = '';
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8);
curl_setopt($ch, CURLOPT_TIMEOUT, 8);
$result = curl_exec ($ch);
print "<pre>\n";
print_r(curl_getinfo($ch));
// get error info echo "\n\ncURL error number:" .curl_errno($ch);
// print error info echo "\n\ncURL error:" . curl_error($ch);
print "
\ n "; curl_close ($ ch); echo $ result;

номер ошибки cURL: 28 ошибка cURL:

Операциятайм-аут после 8000 миллисекунд с 0 полученными байтами

Хорошо: $url = <a href="http://.../page.htm" rel="noreferrer">http://.../page.htm</a> Ошибка: $url = <a href="http://.../page.php" rel="noreferrer">http://.../page.php</a>

Ответы [ 3 ]

6 голосов
/ 27 марта 2011

Вы не настраиваете User Agent.Некоторые серверы на самом деле даже не отвечают на такие запросы (поэтому клиент не знает, что соединение разорвано).

Добавьте в свой код следующее:

curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

Кроме того, я используюследующие в моей функциональности CURL:

curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_MAXREDIRS,50);
if(substr($url,0,8)=='https://'){
    // The following ensures SSL always works. A little detail:
    // SSL does two things at once:
    //  1. it encrypts communication
    //  2. it ensures the target party is who it claims to be.
    // In short, if the following code is allowed, CURL won't check if the 
    // certificate is known and valid, however, it still encrypts communication.
    curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
}
1 голос
/ 24 февраля 2016

Установить в настройку CURL

curl_setopt($ch, CURLOPT_TIMEOUT, 300); // 300 seconds

Если проблема не устранена, запустите скрипт с отключением следующего местоположения.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
1 голос
/ 26 февраля 2011

Может быть из-за сессионных блокировокПопробуйте удалить session_start () со страницы, которую вы пытаетесь получить с помощью cURL

Также смотрите это session.auto-start

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