Аутентификация — curl http auth отлично работает в командной строке, но на php нет

Здравствуйте, у меня есть код командной строки:

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

2

Решение

Это не так, как вы отправляете Basic Auth с помощью curl. Для Basic ожидаемый заголовок Authorization: Basic <base64 encoded string> где закодированная строка: `. Способ сделать это OOTB с помощью curl (при условии, что нет других конфигураций) — с помощью ключа -u. Пример:

curl -u "user:pass" http://<endpoint>/

Если вы отправляете заголовок «вручную», вы должны сначала кодировать его в base64.

Теперь ваш PHP-код правильный и ваш curl неверный звонок Это подразумевает, что существует проблема с интерпретацией сервиса Authorization,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]