HTTP-запрос с PHP CURL и получение другого результата от почтальона и curl - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь сделать запрос GET, используя curl в php с кодом ниже.

test.php

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://apiaddress/collection',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer 374dad6fdc005a0f17c49aeg77rbifuy48t7205hfhf7he8857c'
    ),
    CURLINFO_HEADER_OUT => true
));

$response = curl_exec($curl);
$err = curl_error($curl);

$info = curl_getinfo($curl, CURLINFO_HEADER_OUT);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo "Response code: " . $httpCode . "\nResponse body: \n" . $response . "\n";
}


curl_close($curl);
echo $info;

Этот запрос работает в Postman и работает с использованием этой команды curl curl -X GET \ https://apiaddress/collection -H 'Authorization: Bearer 374dad6fdc005a0f17c49aeg77rbifuy48t7205hfhf7he8857c', но когда я запускаю php test.php в кли, я получаю этот вывод.Я предполагаю, что пропускаю заголовок или отправляю неправильный заголовок куда-нибудь?

Код ответа: 401

Тело ответа:

{"type":"https://apiaddress/errors#error-unauthorized","title":"Unauthorized","detail":"No предоставлены учетные данные авторизации. Вы должны предоставить токен авторизации для этого запроса.", "Status": 401}

GET / collection HTTP / 2

Хост: apiaddress

Принять: * / *

Авторизация: Носитель 374dad6fdc005a0f17c49aeg77rbifuy48t7205hfhf7he8857c

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Оказывается, что для этого API требуется заголовок User-Agent, и кажется, что Postman и curl cli отправляют их автоматически, а запрос php-curl - нет.Как только я добавил этот заголовок и составил значение, он начал работать.

0 голосов
/ 12 февраля 2019

Вы, кажется, запускаете это в localhost, где вам дополнительно понадобится строка:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

Это говорит cURL не проверять ваш сертификат SSL.

В качестве альтернативы,если у вас действительно есть .pem файл сертификата, вы можете использовать:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($curl, CURLOPT_CAINFO, "/path/to/cacert.pem");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...