Вопрос:

Как исправить Аутентификацию требуется ошибка 401 при использовании curl с http аутентификацией

php curl http-status-code-401 http-authentication

18 просмотра

2 ответа

11 Репутация автора

Я использую локальный скрипт php, который запускает curl на скрипте на удаленном сервере. Удаленный скрипт защищен HTTP-аутентификацией.

Когда я запускаю свой локальный скрипт, я получаю следующую ошибку:

«Этот сервер не может подтвердить, что вы авторизованы для доступа к URL-адресу« /script.php ». Вы либо ввели неверные учетные данные (например, неверный пароль), либо ваш браузер не понимает, как предоставить требуемые учетные данные.

Если вам разрешено запрашивать документ, проверьте свой идентификатор пользователя и пароль и повторите попытку.

Если вы считаете, что это ошибка сервера, обратитесь к веб-мастеру.

Ошибка 401 "

Я попробовал ответы с наибольшим количеством голосов здесь: Как мне сделать запрос, используя базовую аутентификацию HTTP с PHP curl? и я попробовал это: https://thisinterestsme.com/php-curl-http-auth/

-> Я всегда получаю одну и ту же ошибку сверху.

Я $usernameи $passwordопределил. Код, который я использую:

$url = 'https://' . $page . '/script.php';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', $additionalHeaders));
print_r($additionalHeaders);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payloadName);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($ch);
print_r($return);
curl_close($ch);

После печати $additionalHeadersпеременной я получаю следующую дополнительную информацию перед ошибкой:

«HTTP / 1.1 401 неавторизован. Дата: суббота, 10 августа 2019 г. 22:05:26 GMT Сервер: Apache WWW-Authenticate: область обзора дайджеста =« Защищено », nonce =« Xg78fMqPBQA = 8d674639fbd19b9ec67b085aa43e90be7a4c57cc », алгоритм =« hd5 », q = MD5 Варьируется: accept-language, accept-charset Strict-Transport-Security: max-age = 16000000 Обновление: h2 Соединение: Обновление Accept-Ranges: байты Transfer-Encoding: chunked Content-Type: text / html; charset = utf-8 Content -Язык: en "

Печать $returnничего не показывает ...

Автор: sunyamare Источник Размещён: 10.08.2019 10:12

Ответы (2)


0 плюса

11658 Репутация автора

ваш сайт вообще не использует HTTP Basic Auth, он использует дайджест-аутентификацию доступа , Google CURLAUTH_DIGEST,

curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_DIGEST);
Автор: hanshenrik Размещён: 11.08.2019 12:34

0 плюса

11 Репутация автора

Рабочее решение во всей его полноте (кроме $url $usernameи $password) выглядит так:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payloadName);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($ch);
curl_close($ch);
Автор: sunyamare Размещён: 11.08.2019 08:05
Вопросы из категории :
32x32