首页 > 解决方案 > 如何使用 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'].

我的请求应该是什么样子?

标签: phpcurl

解决方案


您需要使用 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);

推荐阅读