PHP CURL ничего не возвращает - PullRequest
23 голосов
/ 13 июня 2011
function ParseUrl($URL)
{
    $crl = curl_init();
    curl_setopt ($crl, CURLOPT_URL, $URL);
    curl_setopt ($crl, CURLOPT_PORT, 8086);
    curl_setopt ($crl, CURLOPT_USERPWD, "admin:pass");
    curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, 5);
    $ret = curl_exec($crl);
    curl_close($crl);
    return $ret;
}

echo ParseUrl('http://xxx.me/serverinfo');

Код выше просто ничего не возвращает.Страница, которую я пытаюсь получить с помощью curl, использует http-аутентификацию.

Я что-то упустил или что-то простое?

1 Ответ

57 голосов
/ 13 июня 2011

Начните с этого и посмотрите, что вы получите, и после этого будет совершенно очевидно, в чем проблема:

Проверьте, не было ли ошибки с запросом после curl_exec:

if(curl_errno($ch)){
    echo 'Curl error: ' . curl_error($ch);
}

Это даст вам достаточно информации, чтобы узнать, была ли ошибка в запросе.Если ошибки не было, вы можете проверить запрос, отправленный после curl_exec, чтобы дважды проверить, что все отправлено на месте:

print_r(curl_getinfo($ch));

Изменить: После комментариев это то, что вы ищете, чтоотсутствует:

Вам необходимо установить параметр CURLOPT_HTTPAUTH.

Цитата из php.net по теме :

Методы HTTP-аутентификации, которые нужно использовать.Доступные варианты: CURLAUTH_BASIC, CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM, CURLAUTH_ANY и CURLAUTH_ANYSAFE.

Побитовая |(или) оператор может использоваться для объединения более чем одного метода.Если это будет сделано, cURL запросит сервер, чтобы узнать, какие методы он поддерживает, и выберет лучший.

CURLAUTH_ANY - псевдоним для CURLAUTH_BASIC |CURLAUTH_DIGEST |CURLAUTH_GSSNEGOTIATE |CURLAUTH_NTLM.

CURLAUTH_ANYSAFE - псевдоним для CURLAUTH_DIGEST |CURLAUTH_GSSNEGOTIATE |CURLAUTH_NTLM.

...