Сделайте HTTP-запрос в cURL надлежащим образом - PullRequest
0 голосов
/ 24 октября 2018

Я передаю данные в Curl, как показано ниже, кажется, что я сделал что-то не так, поскольку он не работает .... пожалуйста, сообщите мне, как правильно сделать запрос.

Ниже приведен полный код:

<?php

$url = 'https://staging.logistics.com/v2/shipments/create';

$data = '
"request_id" : "10",
 "value": "false"
';

$data_string = json_encode(array(
    "customer" => $data
));

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type:application/json'
));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     "Authorization: Basic ZcnM6ZHV55tbXlLZXk="
);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);

curl_close($ch);

echo "$result";
?>

Я получил эту ошибку HTTP:

415 Ошибка доступа к / v2 / shipments / create.Причина: неподдерживаемый тип носителя

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Ошибка «Неподдерживаемый тип носителя» связана с тем, что вы не отправляете действительный JSON.Поскольку вы создаете $data как строку, а затем json_encode() ее, вы получаете данные с двойным кодированием, которые сервер не распознает.Код, показанный в вопросе, приведет к выводу $data_string в виде

{"customer":"\r\n\"request_id\" : \"10\",\r\n \"value\": \"false\"\r\n"}

. Используемая версия будет

{"customer": { "request_id" : "10", "value": "false" } }

. Чтобы получить это, вы должны написать кодсделав объект / массив PHP, а затем закодировав этот объект:

$data = array("request_id" => "10", "value" => "false");

$data_string = json_encode(array(
    "customer" => $data
));

Вот демонстрационная версия , показывающая вывод приведенного выше кода.

Вы также можете сократитьэтот код:

$data = array( 
  "customer" => array(
    "request_id" => "10", 
    "value" => "false")
  )
);
$data_string = json_encode($data);

Ваша ошибка заключалась в том, что вы путали создание данных в коде PHP с их кодированием в текстовом формате передачи (в данном случае JSON).Вместо этого вам нужно создавать данные в PHP с использованием (вложенных) ассоциативных массивов и регулярных массивов таким образом, чтобы при передаче их в json_encode () выходная полезная нагрузка имела правильный формат, требуемый API.

0 голосов
/ 24 октября 2018

Попробуйте соединить токен с параметром curl следующим образом:

 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: ' . $your_token));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...