PHP CURL ничего не возвращает

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-аутентификацию.

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


person jM2.me    schedule 12.06.2011    source источник
comment
Если в имени пользователя и пароле есть специальные символы (например, символ @, если ваше имя пользователя является адресом электронной почты), убедитесь, что они экранированы.   -  person lonesomeday    schedule 13.06.2011
comment
Нет, имя пользователя просто admin и пароль тоже простой.   -  person jM2.me    schedule 13.06.2011


Ответы (1)


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

Проверяем, была ли ошибка с запросом после 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.

person rzetterberg    schedule 12.06.2011
comment
Curl не возвращает никакой ошибки, но с помощью print_r(curl_getinfo($ch)); я заметил [http_code] => 401 ›_‹ Если есть простой способ получить файл с URL-адреса с HTTP-аутентификацией. формат URL следующий: admin:[email protected]:8086/serverinfo - person jM2.me; 13.06.2011
comment
Также даже file_get_contents с полным URL-адресом (с учетными данными и портом) возвращает 401 Unauthorized. Но я могу просто перейти по ссылке и браузеру, и он работает как надо. - person jM2.me; 13.06.2011
comment
Спасибо помогло :) Я действительно понял, что мне не хватает опции авторизации после поиска curl 401. Но большое спасибо, проблема решена :) - person jM2.me; 13.06.2011
comment
Спасибо это помогло братан. - person Joe Curcuru; 11.04.2016