Сбой аутентификации cURL с PHP / CLI, но Wget CLI и AJAX-запросы работают

Я пытаюсь получить доступ к API Почты Австралии для проверки адресов, однако я не могу авторизовать вызов через cURL с PHP или CLI.

Следующий вызов Wget CLI работает как положено и возвращает XML:

wget [email protected] --password=pass https://api.auspost.com.au/ValidateAddress.xml?addressLine1=31+test+street\&suburb=Adelaide\&postcode=5000\&state=SA\&country=Australia

И журнал CLI от Wget:

--2014-12-16 00:33:24--  https://api.auspost.com.au/ValidateAddress.xml?addressLine1=31+test+street&suburb=Adelaide&postcode=5000&state=SA&country=Australia
Resolving api.auspost.com.au (api.auspost.com.au)... 54.66.176.138, 54.66.176.138
Connecting to api.auspost.com.au (api.auspost.com.au)|54.66.176.138|:443... connected.
HTTP request sent, awaiting response... 401 Authorization Required
Reusing existing connection to api.auspost.com.au:443.
HTTP request sent, awaiting response... 200 OK
Length: 255 [application/xml]
Saving to: ‘ValidateAddress.xml?addressLine1=31+test+street&suburb=Adelaide&postcode=5000&state=SA&country=Australia.5’

Однако приведенный ниже вызов cURL CLI не делает:

curl -u [email protected]:pass https://api.auspost.com.au/ValidateAddress.xml?addressLine1=31+test+street\&suburb=Adelaide\&postcode=5000\&state=SA\&country=Australia -v

журнал CURL:

* Hostname was NOT found in DNS cache
*   Trying 54.66.176.138...
* Connected to api.auspost.com.au (54.66.176.138) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
* Server certificate: api.auspost.com.au
* Server certificate: VeriSign Class 3 Extended Validation SSL SGC CA
* Server certificate: VeriSign Class 3 Public Primary Certification Authority - G5
* Server auth using Basic with user '[email protected]'
> GET /ValidateAddress.xml?addressLine1=3 HTTP/1.1
> Authorization: Basic auth_hash_here
> User-Agent: curl/7.37.1
> Host: api.auspost.com.au
> Accept: */*
>
< HTTP/1.1 401 Authorization Required

Передача заголовка «Авторизация» с аутентификационным хешем, как показано ниже, также приводит к ошибке 401.

curl -H 'Authorization: Basic auth_hash_here' https://api.auspost.com.au/ValidateAddress.xml?addressLine1=31+test+street\&suburb=Adelaide\&postcode=5000\&state=SA\&country=Australia -v

В конечном счете, мне нужно вызвать это в PHP (в идеале через Guzzle, но я возьму cURL, если я смогу заставить его работать!). Ниже приведен код PHP, который я пробовал безуспешно.

$service_url = 'https://api.auspost.com.au/ValidateAddress.xml?addressLine1=31+test+street&suburb=Adelaide&postcode=5000&state=SA&country=Australia';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "[email protected]:pass");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);

$curl_response = curl_exec($curl);
var_dump($curl_response);

Я успешно выполнил вызов через клиент Chrome REST и могу видеть правильные заголовки, отправляемые вместе с вызовом через сетевой инспектор Chrome.

Имя пользователя и пароль верны и подтверждают это много раз.

У кого-нибудь есть какие-либо предложения относительно того, как я мог бы заставить это работать в PHP?

1

Решение

Задача ещё не решена.

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

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

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