Ошибка PHP JSON при использовании базовой аутентификации

Я новичок в PHP и пытаюсь отправить запрос JSON через обычную аутентификацию. Сервер отвечает этой ошибкой:

 object(stdClass)#1 (2) { ["error"]=> object(stdClass)#2 (2) {
["code"]=> int(-32600) ["message"]=> string(44) "expected content type
to be application/json" } ["jsonrpc"]=> string(3) "2.0" }

Из документации API, вот формат запроса:

  Request Format:

{
"jsonrpc": "2.0",
"id":1,
"method": "acct.name.get",
"params": [
"QrOxxEE9-fATtgAD" ]
}

Вот код … Любая помощь будет здорово — спасибо

 <?php

$username = "username";
$password = "password";

$request = [
'jsonrpc' => '2.0',
'id' => 1,
'method' => 'acct.name.get',
'params' =>['CA6ph0n7EicnDADS'],
];

$curl_post_data = json_encode($request);

$service_url = 'https://userapi.voicestar.com/api/jsonrpc/1';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_URL, $service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD,  "username:password");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$curl_response = curl_exec($curl);
$response = json_decode($curl_response);
curl_close($curl);

var_dump($response);

?>

0

Решение

На самом деле, это мелочи … ваш JSON / Array искажен. лишняя запятая в конце params может на самом деле быть проблемой. попробуйте следующее.

Деформированные массивы приведут к тому, что json_encode вернет ноль.

 <?php

$username = "username";
$password = "password";

$request = [
'jsonrpc' => '2.0',
'id'      => 1,
'method'  => 'acct.name.get',
'params'  => ['CA6ph0n7EicnDADS']
];

$curl_post_data = json_encode($request);

$headers = ['Content-type: application/json'];$service_url = 'https://userapi.voicestar.com/api/jsonrpc/1';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_URL, $service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD,  "username:password");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$curl_response = curl_exec($curl);
$response = json_decode($curl_response);
curl_close($curl);

var_dump($response);

?>
1

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

Мне кажется, что API ищет заголовок запроса для отражения JSON.

попробуйте добавить следующее в ваши параметры и посмотреть, что возвращается

curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector