基于 JSON-RPC 2.0 的 API 出现问题

Posted

技术标签:

【中文标题】基于 JSON-RPC 2.0 的 API 出现问题【英文标题】:Trouble with API based on JSON-RPC 2.0 【发布时间】:2015-09-29 15:04:59 【问题描述】:

我正在尝试连接到基于 JSON-RPC 2.0 的 API。因为我是新手,所以我不确定我是否正确编码,因为我收到的只是一个错误。

谁能给我简单解释一下如何在php中连接API?

<?php
 header('Content-Type: application/json');
 //check if you have curl loaded
 if(!function_exists("curl_init")) die("cURL extension is not installed");

 $url = 'xxxxxxxxx';

$data = array(
"operator_id" => "xxxx",
"login"       => "xxxx",
"password"    => "xxxx",
);

$curl_options = array(
     CURLOPT_URL => $url,
     CURLOPT_HEADER => 0,
     CURLOPT_NOBODY => true,
     CURLOPT_POSTFIELDS => $data,
     CURLOPT_RETURNTRANSFER => TRUE,
     CURLOPT_TIMEOUT => 0,
     CURLOPT_SSL_VERIFYPEER => 0,
     CURLOPT_FOLLOWLOCATION => TRUE,
     CURLOPT_ENCODING => 'gzip,deflate',
     CURLINFO_HEADER_OUT    => true,
);

$ch = curl_init();
curl_setopt_array($ch, $curl_options);
$output = curl_exec($ch);
curl_close($ch);

$arr = json_decode($output,true);
echo ($output);
?>

我收到的响应是这样的:"jsonrpc":"2.0","error":"code":-32600,"message":"Invalid request","id":null

如果成功登录,我应该收到的响应是:"jsonrpc":"2.0","re​​sult":true,"error":null,"id":1,"ts":1368533487

【问题讨论】:

请给出一个无法正常工作的代码示例。 刚刚包含代码和错误... 【参考方案1】:

您根本没有发送 JSON-RPC 请求。

请求必须是 JSON 正文,因此您必须在将数据传递给 CURLOPT_POSTFIELDS 之前对数据进行 json_encode。

发布的 json 必须具有键 methodparamsidjsonrpc(最后一个应设置为“2.0”)。您的数据将进入paramsid 可以设置为任何值,但如果没有它,您根本不应该得到响应。

这是一种非常简单的格式。请参阅http://www.jsonrpc.org/specification 的规范

【讨论】:

谢谢伙计!我刚刚意识到我要发送的内容......我没有得到正确的回复!再次欢呼。

以上是关于基于 JSON-RPC 2.0 的 API 出现问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中的 JSON-RPC 2.0 中编写“参数”?

zabbix api的使用

使用golang 实现JSON-RPC2.0

.NET 开源项目 StreamJsonRpc 介绍[上篇]

Zabbix 调用API 批量添加主机等

通过zabbix的API接口获取服务器列表