Я работаю над сценарием PHP, который должен подключаться к REST API. Поставщик API, предложил использовать cURL. Они дали мне пример того, как использовать его в командной строке:
curl -D- -u "user:password" -X GET -H "Content-Type: application/json" http://example.com/api/searchFunction?jql=assignee=user1
PHP-скрипт выглядит следующим образом:
<?php
$defaults = array(
CURLOPT_HEADER => true,
CURLOPT_URL => 'http://example.com/api/searchFunction?jql=assignee=user1',
CURLOPT_USERPWD => "user:password",
CURLOPT_HTTPAUTH => 'CURLAUTH_BASIC'
);
$ch = curl_init();
curl_setopt_array($ch, ($defaults));
echo "cURL output: ".curl_exec($ch);
curl_close($ch);
?>
Как вы можете себе представить, версия из командной строки работает нормально, но в версии PHP я получил следующую ошибку:
Field 'assignee' does not exist or this field cannot be viewed by anonymous users.
Это говорит о том, что проверка логина пользователя не работает. Тем не менее, пользователь и пароль верны.
Я искал уже отвеченные посты эквивалентов параметров cURL между версией командной строки и версией PHP, но не смог найти правильные параметры для версии PHP.
Вы еще не полностью повторили свою команду cURL.
Для начала, вы никогда не устанавливали Content-Type: application/json
опция заголовка. Вы должны установить это с помощью CURLOPT_HTTPHEADER
вариант.
Во-вторых, командная строка cURL и PHP cURL используют разные User-Agent
ценности.
Подумайте о том, чтобы включить в командной строке параметр verbose cURL, чтобы вы могли видеть всю информацию, которую она отправляет, а затем реплицировать ее PHP.
Других решений пока нет …