2016-02-25 3 views
0

Я новичок в 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

Почему вы уменьшаете/переиндексируете свой массив с помощью '$ out = array_values ​​($ request);'? Даже с правильными заголовками я не вижу, чтобы этот запрос работал правильно. – Devon

+0

Честно говоря, я полный новичок - я на самом деле пытаюсь извлечь данные из API (GET вместо POST-ing?) - Я пробую разные вещи, чтобы разобраться в вещах – PiE

ответ

1

На самом деле, это мелочи ... Ваш JSON/Массив имеет неверный формат. дополнительная запятая в конце 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); 

?> 
+0

I Т РАБОТЫ! Потрясающие.Спасибо за ваше время. – PiE

+0

Абсолютно! Наслаждайтесь! –

0

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

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

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

Спасибо - я пробовал это, но я получаю ту же ошибку ... – PiE

+0

json_encode может принимать массивы. Ассоциативные массивы будут преобразованы в собственное имя: пара значений .... Convert $ curl_post_data = json_encode ($ out); - $ curl_post_data = json_encode ($ request); и посмотреть, что возвращается –

+0

То же самое - объект (stdClass) # 1 (2) {["error"] => object (stdClass) # 2 (2) {["code"] => int (-32600) ["message"] => string (44) "ожидаемый тип контента, который должен быть application/json"} ["jsonrpc"] => string (3) "2.0"} – PiE

Смежные вопросы