#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»: «Недопустимый формат атрибутов экспорта»}