JSON RPC返回';无效的API参数';应python的请求
我正在尝试使用python和请求为项目创建自己的jsonrpc客户端。在线搜索一个小时后,大多数错误都与执行get的人有关,而不是与发布或收到不同错误的人有关。根据JSONRPC规范(在这里找到),它应该可以工作。任何帮助都将不胜感激。谢谢,山姆 请求和代码如下: 请求后机构:JSON RPC返回';无效的API参数';应python的请求,python,Python,我正在尝试使用python和请求为项目创建自己的jsonrpc客户端。在线搜索一个小时后,大多数错误都与执行get的人有关,而不是与发布或收到不同错误的人有关。根据JSONRPC规范(在这里找到),它应该可以工作。任何帮助都将不胜感激。谢谢,山姆 请求和代码如下: 请求后机构: {"method": "GudMethod", "params": {"ur": "HELLO"}, "jsonrpc": "2.0", "id": 1} 请求-响应: { "jsonrpc": "2.0", "res
{"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)
另外,不要让我用现成的。我已经被告知了,但由于项目将在哪里使用,我无法安装任何库。幸运的是,将安装请求,否则会很痛苦您客户的请求看起来很好 服务器必须错误地解析您的请求,将值
GudMethod
分配给名称jsonrpc
根据以下情况,不仅服务器解析您的请求不正确,而且响应也无效:
1) 不应有结果
字段:
结果成功时需要此成员。
如果调用该方法时出错,则该成员不得存在。
此成员的值由服务器上调用的方法确定 2) 应该有一个顶级
错误字段:
错误
出现错误时需要此成员。
如果调用过程中未触发错误,则此成员不得存在。
此成员的值必须是第5.1节中定义的对象
3) error
字段应该是包含以下字段的JSON对象:
代码
指示发生的错误类型的数字。
这必须是一个整数。
消息
提供错误简短描述的字符串。
信息应限于一句简洁的句子。
数据
包含有关错误的附加信息的基本值或结构化值。
这可以省略。
此成员的值由服务器定义(例如详细错误信息、嵌套错误等)
由于服务器错误地认为jsonrpc
字段不等于2.0
,因此错误code
字段应为-32600,消息字段无效请求
表示
发送的JSON不是有效的请求对象
几天前试过,现在才试过。不起作用。规范以字符串形式请求它。参数的顺序在请求中重要吗?在常规JSON中,我知道这不是真的,但是规范中的所有示例都将jsonrpc作为第一个字段。您可以尝试使用OrderedDict构建请求,以便请求json具有正确的order.Nope。作为快速试用,我从spec demo部分复制了一个请求,并替换了其中的字符串。body='{jsonrpc:“2.0”,“method:“#method#”,“params:#PRMS#”,“id:#id#}”。replace(#method#),self.method,1)。replace(#PRMS#),json.dumps(self.PRMS),1)。replace(#id#),str(self.client.id),1)