Заголовок мыла с базовой авторизацией в собственном переполнении стека

мне нужно подключиться к API-интерфейсу TeraData SOAP, который теперь требует отправки основного заголовка авторизации с учетными данными для входа. Я не знаю, как решить проблему. Я получил доступ, работающий в SoapUI при добавлении Basic Authorization Header — пожалуйста, кто-нибудь может мне помочь разобраться в коде:

Вот заголовок SoapUI, и ответ хороший:

POST http://example.com/api/soap/v6 HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: ""Content-Length: 302
Host: example.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Authorization: Basic [user&pass-base64-encoded]

Вот как я пытаюсь настроить мой SoapClient:

$namespace =  "http://ecircle.com/developer/ecmapi";
$wsdl = "https://sslh.teradatadmc.com/teradata/api/soap/v6?wsdl";
$client = new SoapClient($wsdl, array("trace" => 1, "exceptions" => 0));
$login = 'xxx';
$password = 'yyy';
$header = new SoapHeader($namespace, 'Authorization: Basic',
base64_encode("$login:$password"));
$client->__setSoapHeaders($header);

это не принято, и я просто получаю HTTP / 1.1 401 Unauthorized Error

На трассировке стека отображается заголовок, который я отправил — там отсутствует часть авторизации.

public '__last_request_headers' => string 'POST /api/soap/v6 HTTP/1.1
Host: example.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.5.12
Content-Type: text/xml; charset=utf-8
SOAPAction: ""Content-Length: 584

0

Решение

чувак, я был так глуп

$client = new SoapClient($wsdl, array("trace" => 1, "exceptions" => 0,
"login" => $login, "password" => $password) );

Для HTTP-аутентификации параметры логина и пароля могут использоваться для предоставления учетных данных.

1

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

Это потому, что вы должны закодировать свои учетные данные следующим образом:

base64_encode("$login:$password")

вместо:
base64_encode($login) . ':' . base64_encode($password)

-1

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