Отправка данных для разделения с использованием PHP и cURL

#php #json #curl

#php #json #curl

Вопрос:

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

 Request Body: 
{
  "nutrients": {
    "protein": "beans",
    "fats": "oil",
    "carbohdrate": "starch"

  }
}
  

Каждый раз, когда я запускаю скрипт, я получаю следующую ошибку ниже

 {"errors":[{"status":"400","code":"031","title":"payload not parseable","detail":"Invalid formatting of the request payload."},{"status":"400","code":"026","title":"payload missing","detail":"No payload describing the resource object included in the request."}]}
  

Похоже, это потому, что я не добавляю переменную «nutrients» в массив данных, который должен быть размещен.

Кто-нибудь может мне помочь. Ниже приведены мои усилия на данный момент. Спасибо

 <?php
$url = "https://myapi_site.com/server/";  
$data = array(
        'protein' => 'beans',
        'fats' => 'oil',
        'carbohdrate'  => 'starch'          
); 
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
        array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

$json_response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
$response = json_decode($json_response, true);
?>
  

Ответ №1:

Вы отправляете массив PHP, который не был преобразован в JSON… вы хотите опубликовать сам JSON. Вот как вы можете опубликовать строку JSON.

 curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
  

Вы можете использовать json_encode для кодирования массива PHP в JSON:

http://php.net/json_encode

Определите свою $data переменную следующим образом:

 $data = array(
  'nutrients' => array(
        'protein' => 'beans',
        'fats' => 'oil',
        'carbohdrate'  => 'starch',
   ),
); 
  

Вы можете повторить $data переменную, чтобы убедиться, что она содержит правильные данные JSON:

 echo $data;
  

Комментарии:

1. Ошибка все еще сохраняется, похоже, это потому, что я не добавляю переменную «nutrients» в массив данных, который должен быть размещен. возможно ли сделать что-то вроде $data = array(питательные вещества( ‘белок’ => ‘бобы’, ‘жиры’ => ‘масло’, ‘углеводы’ => ‘крахмал’));

2. пожалуйста, добавьте nutrients, поскольку я не вижу никаких обновлений nutrients в коде

3. Я отредактировал свой ответ, чтобы иметь обновленную переменную для $ data, скопируйте и вставьте ее в ваш код. Да, просто используйте это $data = array(nutrients( 'protein' => 'beans', 'fats' => 'oil', 'carbohdrate' => 'starch' ));