Неисправность установки ключа API в запросе POST

пытаюсь сделать запрос 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 и не видел, как я могу установить это. Какие-либо предложения? Огромное спасибо.

0

Решение

Проблема в том, что вы используете параметры CURL неправильно. В соответствии с руководство, когда вы установите CURLOPT_POSTFIELDS вариант к arrayCURL силы 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));
...
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]