пытаюсь сделать запрос API через curl. Документы API говорят, что я должен сделать запрос POST следующим образом:
POST url
Headers:
Content-Type: “application/json”
Body:
{
Context: {
ServiceAccountContext: "[Authorization Token]"},
Request:{
Citations:[
{
Volume: int,
Reporter: str,
Page: int
}
]
}
}
Вот моя просьба:
$postFields = array(
'Volume' => int,
'Reporter' => str,
'Page' => int,
'ServiceAccountContext' => $API_KEY
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:application/json"));
curl_setopt($ch, CURLOPT_POST, count($postFields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
$output=curl_exec($ch);
Но API не распознает, что я отправил API_KEY через поле POST. Ошибка, которую я получаю, заключается в создании объекта SecurityContext, который, как я полагаю, как-то связан с частью тела POST, в которой говорится о Context и ServiceAccountContext.
Я посмотрел в документации cURL и не видел, как я могу установить это. Какие-либо предложения? Огромное спасибо.
Проблема в том, что вы используете параметры CURL неправильно. В соответствии с руководство, когда вы установите CURLOPT_POSTFIELDS
вариант к array
CURL силы Content-Type
заголовок к multipart/form-data
, то есть линия, где вы устанавливаете CURLOPT_HTTPHEADER
опция игнорируется
Вы должны конвертировать $postFields
в строку JSON json_encode
функция, прежде чем передать его CURLOPT_POSTFIELDS
опция:
...
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:application/json"));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postFields));
...
Других решений пока нет …