CURL не работает из переполнения стека

В моем приложении я использую API Commercetools.

Чтобы получить данные из их API, мне нужно вызвать конечную точку.

Ниже приводится конечная точка, которую я использовал для получения продуктов.

https://api.sphere.io/vc-1209/products -H "Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS"

Когда я запускаю выше URL в терминале, как

curl https://api.sphere.io/vc-1209/products -H "Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS"

Это дает мне ответ со всеми продуктами.

Но когда я выполняю тот же URL из PHP cURL, он не работает.

$url = 'https://api.sphere.io/vc-1209/products -H "Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS"';

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($curl);

print_r($response);

Я возвращаюсь:

Клиент отправил неверный запрос.

-1

Решение

Вы всего, что вам нужно установить CURLOPT_HTTPHEADER здесь в вашем примере, чем вы можете получить ответ.

<?php
$url = 'https://api.sphere.io/vc-1209/products';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS'
));
$response = curl_exec($ch);
var_dump($response);
?>

Когда вы запустите свой код на локальном хосте, он даст вам bool(false) возможно только из-за https запрос.

Когда я нажимаю на ваш запрос на производство, где включен https, он дает мне такой ответ:

Строка (130)
«{» StatusCode «: 401,» сообщение «:» invalid_token » «ошибка»: [{ «код»: «invalid_token», «сообщение»: «invalid_token»}], «Ошибка»: «invalid_token»}»

Эта ошибка четко показывает, нужно добавить access token в вашем запросе CURL в качестве заголовка.

Также обратите внимание, что код состояния curl равен 401, что означает, что вы не авторизованы для выполнения этого запроса, вам необходимо добавить токен доступа.

4

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

Проблема очевидна, вы добавляете -H "Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS" на URL, который заставит PHP запросить URL:

https://api.sphere.io/vc-1209/products%20-H%22Authorization%3A%20Bearer%20-5DVqQFgkd_SDGthsFgtepS%22

Если вы хотите установить пользовательские заголовки в PHP cURL, установите CURLOPT_HTTPHEADERS опция:

$curl = curl_init('https://api.sphere.io/vc-1209/products');
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array( // Set Headers
'Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS'
));

$response = curl_exec($curl);
print_r($response);
curl_close($curl); // Close cURL
1

Вам нужно правильно установить заголовки:

$url = 'https://api.sphere.io/vc-1209/products';
$bearerToken = "someToken";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Bearer '.$bearerToken));
$response = curl_exec($curl);
1