Не удается подключиться к API Wufoo из PHP (localhost), но можно подключиться с помощью терминала curl OK

Если я запускаю это в терминале (используя мой настоящий api ID, конечно), он работает нормально.

curl -u "MYAPIID":"footastic" "https://myaccountid.wufoo.com/api/v3/forms.json"

Я пытаюсь получить тот же результат в PHP на моем локальном сервере (localhost), используя это:

$curl = curl_init('https://myaccountid.wufoo.com/api/v3/forms.json');

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'Wufoo Form Getter');
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_USERPWD, 'MYAPIID:footastic');

$response = curl_exec($curl);
$resultStatus = curl_getinfo($curl);
if ($resultStatus['http_code'] == 200) {
$result = json_decode($response, true);
} else {
$result = 'Call Failed ' . print_r($resultStatus, true);
}

echo "<pre>";
print_r($result);
echo "</pre>";

Он всегда возвращает результат «Ошибка вызова» со следующими данными:

Call Failed Array
(
[url] => https://myaccountid.wufoo.com/api/v3/forms.json
[content_type] =>
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => -1
[ssl_verify_result] => 1
[redirect_count] => 0
[total_time] => 0.216174
[namelookup_time] => 4.1E-5
[connect_time] => 0.215999
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[redirect_url] =>
[primary_ip] => 75.98.93.66
[certinfo] => Array
(
)

[primary_port] => 443
[local_ip] => 192.168.0.9
[local_port] => 54355
)

Почему это будет работать нормально в терминале, но не в PHP? Есть идеи, как заставить это работать?

1

Решение

Удалить curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); из вашего кода. Согласно документу curl:

CURLAUTH_ANY

This is a convenience macro that sets all bits and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure.

Если вы используете curl_setopt($curl, CURLOPT_VERBOSE, true); в вашем коде вы увидите, что он не отправляет базовую аутентификацию в заголовке. Но если вы удалите эту строку, как я уже упоминал, вы увидите, что она работает.

Вы также можете запустить команду curl, используя -v вариант. Он покажет вам отладочные отпечатки. Это поможет вам сопоставить заголовки запроса вашей командной строки и кода.

0

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

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

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