2016-10-18 3 views
-1

В моем приложении я использую API Commercetools.CURL не работает с php

Чтобы получить данные из своего 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-адрес из cURL PHP, он не работает.

$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

Ваша переменная называется url, и вы передаете ... то, что не является URL-адресом. Разве это не заставляет вас думать, где может быть ошибка? – PeeHaa

+0

GET или POST? Потому что в php-скрипте у вас есть POST –

ответ

1

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

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

Если вы хотите установить пользовательские заголовки в Curl в PHP установить 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 
+0

Пробовал stll same – Gowri

+0

@ Gowri Вы тоже изменили URL? – timmyRS

+0

это проблема аутентификации, вам нужно добавить токен доступа в свой запрос. – devpro

1

Yo и необходимо установить заголовки соответствующим образом:

$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); 
+0

По-прежнему такая же ошибка – Gowri

4

Вы всего вам нужно установить 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 запрос как заголовок.

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

+1

, а также для downvoter, по крайней мере, подождите 10-15 секунд, если вы не хотите делиться комментариями или областями улучшения. – devpro

+1

Я думаю, когда пользователь downvotes они должны быть вынуждены дать повод ... Я подниму вас –

+0

@ka_lin: ur right. – devpro