Здравствуйте, у меня есть код командной строки:
curl 'http://192.168.0.1:80/' -H 'Authorization: Basic my_auth'
В php:
$process = curl_init($ip);
//just for "shore"curl_setopt($data, CURLOPT_HTTPHEADER,
array(
"Authorization: Basic " . base64_encode($username . ":" . $password)
));
curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($process, CURLOPT_USERPWD, $login . ":" . $password);
curl_setopt($process, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($process, CURLOPT_TIMEOUT, 10);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_VERBOSE, 1);
curl_setopt($process, CURLOPT_HEADER, 1);
$return = curl_exec($process);
В результате я вижу: 401 …
В журнале apache2:
- HTTP 1.0, предположим, что закрыть после тела < HTTP / 1.0 401 Несанкционированный < Дата: пт, 15 июля 2016 09:27:20 GMT < Сервер: Boa / 0.94.13 <
Подключение: закрыть < WWW-Authenticate: Basic realm = «service» <
Content-Type: text / html; кодировка = ISO-8859-1 < Set-Cookie:
SESSIONID = 068054d0; <- Закрытие соединения 53
- Отправьте еще один запрос на этот URL: »
- Имя хоста найдено в кеше DNS
- Пытаюсь 192.168.0.1 …
- Подключен к 192.168.0.1 (192.168.0.1) порту 80 (# 54)
Аутентификация сервера с использованием Basic с пользователем ‘admin’
GET / HTTP / 1.0 Авторизация: Базовый my_code Хост: 192.168.0.1 Принять: /
HTTP 1.0, предположим, что закрыть после тела < HTTP / 1.0 401 Несанкционированный < Дата: пт, 15 июля 2016 09:27:20 GMT < Сервер: Boa / 0.94.13 <
Подключение: закрыть- Проблема аутентификации. Игнорируя это. < WWW-Authenticate: Basic realm = «service» < Content-Type: text / html; кодировка = ISO-8859-1 <
Set-Cookie: SESSIONID = 068054d0; <- Закрытие соединения 54
Это не так, как вы отправляете Basic Auth с помощью curl. Для Basic ожидаемый заголовок Authorization: Basic <base64 encoded string>
где закодированная строка: `. Способ сделать это OOTB с помощью curl (при условии, что нет других конфигураций) — с помощью ключа -u. Пример:
curl -u "user:pass" http://<endpoint>/
Если вы отправляете заголовок «вручную», вы должны сначала кодировать его в base64.
Теперь ваш PHP-код правильный и ваш curl
неверный звонок Это подразумевает, что существует проблема с интерпретацией сервиса Authorization
,
Других решений пока нет …