Как отправить массив и объект с помощью curl

#php #curl

#php #curl

Вопрос:

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

У меня есть код

 $curl = curl_init();


$fields = (object) array(
     'contactFilter' => (object) array(
          'clicked_message.messageid' => '5',
          'messages_sent.messageid' => '5'
      ),
     'exportAttributes' => 'email',
   );

$fields = json_encode($fields);

$fields_string = http_build_query($fields);

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.sendinblue.com/v3/contacts/export",
  CURLOPT_HTTPHEADER => array(
    'Accept: application/json',
  'Content-Type: application/json',
  'api-key: my-key-12345',
  ),
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => $fields_string
));

$response = curl_exec($curl);
  

В документации говорится, что мне нужно;

 contactFilter object (X= campaign id): {"clicked_message.messageid": X,"messages_sent.messageid": X}
  

и

 exportAttributes` array of strings For example, `['fname', 'lname, 'email'].
  

как должен выглядеть мой запрос?

Ответ №1:

Вам нужно использовать CURLOPT_POSTFIELDS для публикации полей, например

 $fields = array(
        'username' => "annonymous",
        'api_key' =>  "1234"
    ); 
 $fields_string = http_build_query($fields);
  

Теперь используйте переменную fields_string для отправки данных массива

    curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string);
  

Ваш запрос curl будет выглядеть следующим образом

 curl_setopt_array($curl,
  array(
    CURLOPT_URL => "https://api.sendinblue.com/v3/contacts/export",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => $fields_string
  )
);
  

Обновленный код-

 $curl = curl_init();


$fields = (object) array(
 'contactFilter' => (object) array(
      'clicked_message.messageid' => '5',
      'messages_sent.messageid' => '5'
  ),
 'exportAttributes' => 'email',
);

$fields = json_encode($fields);

//$fields_string = http_build_query($fields);

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.sendinblue.com/v3/contacts/export",
  CURLOPT_HTTPHEADER => array(
    'Accept: application/json',
   'Content-Type: application/json',
   'api-key: my-key-12345',
  ),
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => $fields
));

$response = curl_exec($curl);
echo $response;

print_r($response);
  

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

1. спасибо, можете ли вы рассказать мне, как должен выглядеть объект json со всеми параметрами, которые мне нужны? Я попробовал это $fields = array( ‘contactFilter’ => (object) array( ‘clicked_message.messageid’ => ‘5’, ‘messages_sent.messageid’ => ‘5’ ), ‘exportAttributes’ => ’email’ );

2. Ничего не происходит, я обновил свой вопрос с полным кодом, который я написал сейчас. Я не могу понять, как передать ключ и объект..

3. ваш код правильный, просто прокомментируйте строку //$fields = json_encode($fields);

4. я получаю сообщение об ошибке {«error»:{«status»: 400, «message»: «Ввод должен быть допустимым объектом JSON», «code»: «bad_request»}}

5. {«code»: «invalid_parameter», «message»: «Недопустимый формат атрибутов экспорта»}