JSON RPC在python中根据请求返回“无效的API参数”

时间:2018-05-24 21:22:25

标签: python

我正在尝试使用python和requests为项目创建自己的jsonrpc客户端。在线搜索一小时后,大多数错误都与执行获取而不是帖子的人或者获得不同错误的人有关。根据JSONRPC规范(在这里找到http://www.jsonrpc.org/specification)它应该工作。任何帮助都会非常感激。谢谢Sam。

请求&代码如下:

邮寄申请机构:

{"method": "GudMethod", "params": {"ur": "HELLO"}, "jsonrpc": "2.0", "id": 1}

请求回复:

{
"jsonrpc": "2.0",
"result": {
    "method": "GudMethod",
    "success": false,
    "error": "Invalid API parameter [jsonrpc] must be 2.0 [\"GudMethod\"]",
    "extra": [],
    "metrics": {
        "st": "2018-05-24 22:16:37",
        "sspt": 0.0006299018859863281
    }
},
"id": null
}

代码:

import json
import requests

class Client():
    def __init__(self,url):
        self.url = url
        self.id = 0

    def request(self,method,prms):
        rq = Request(self,method,prms)
        return rq

class Request():
    def __init__(self,client,method,prms):
        self.client = client
        self.method = method
        self.prms = prms
        self.rq = None

    def buildRequest(self):
        self.client.id = self.client.id + 1
        url = self.client.url + "?method={}".format(self.method)
        jb = {}
        jb["jsonrpc"] = "2.0"
        jb["method"] = self.method
        jb["params"] = self.prms
        jb["id"] = self.client.id
        body = json.dumps(jb)
        return url,body
    def execute(self):
        url , body = self.buildRequest()
        self.rq = requests.post(url,data=body)
        print(body)
        print(self.rq.text)

另外,不要让我使用现成的。我被告知已经,但由于项目将在何处使用,我无法安装任何图书馆。幸运的是会安装请求,否则会很痛苦

1 个答案:

答案 0 :(得分:0)

您的客户请求看起来不错。

服务器必须错误地解​​析了您的请求,将值GudMethod分配给了名称jsonrpc

服务器不仅错误地解析了您的请求,而且根据JSON-RPC specification,响应也无效:

1)不应有result字段:

  

结果
  成功需要此成员。
  如果调用该方法时出错,则该成员不得存在。
  该成员的值由服务器上调用的方法确定。

2)应该有一个顶级error字段:

  

错误
  需要该成员才能发生错误。
  如果调用过程中未触发错误,则该成员不得存在。
  该成员的值必须是5.1节中定义的对象。

3)error字段应该是具有以下字段的JSON对象:

  

代码
  一个数字,指示发生的错误类型。
  必须为整数。
  留言
  一个字符串,提供对错误的简短描述。
  消息应仅限于一个简洁的句子。
  数据
  包含有关错误的其他信息的基本或结构化值。
  可以省略。
  该成员的值由服务器定义(例如,详细的错误信息,嵌套的错误等)。

由于服务器错误地认为jsonrpc字段不等于2.0,因此错误code字段应为-32600,消息字段Invalid Request表示

  

发送的JSON不是有效的Request对象。