我正在尝试使用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)
另外,不要让我使用现成的。我被告知已经,但由于项目将在何处使用,我无法安装任何图书馆。幸运的是会安装请求,否则会很痛苦
答案 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对象。