You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义JSON RPC客户端请求返回‘Invalid API parameter’问题排查

解决你的JSON RPC客户端请求错误

看起来你的问题出在请求构造的两个关键细节上,结合错误响应和代码来看,我帮你梳理下:

问题分析

从错误信息Invalid API parameter [jsonrpc] must be 2.0 ["GudMethod"]和你的代码来看,有两个明显的问题:

  1. 你在请求URL里拼接了?method={}参数,但按照JSON RPC规范,POST请求的所有RPC相关信息(包括method)都应该放在请求体中,URL只需要是API端点地址即可。服务器可能把URL里的method参数和请求体里的内容混在一起,导致解析jsonrpc字段时出现混乱。
  2. 你发送POST请求时没有设置Content-Type: application/json头,requests.post用data参数传字符串时,默认的Content-Type是application/x-www-form-urlencoded,服务器可能无法正确解析你的JSON请求体,进而导致参数校验错误。

修改后的代码

我调整了你的代码,修复了这两个问题:

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中的method查询参数,直接使用原始端点地址
        url = self.client.url
        jb = {
            "jsonrpc": "2.0",
            "method": self.method,
            "params": self.prms,
            "id": self.client.id
        }
        body = json.dumps(jb)
        return url, body

    def execute(self):
        url, body = self.buildRequest()
        # 设置Content-Type头为application/json,确保服务器正确解析请求体
        headers = {"Content-Type": "application/json"}
        self.rq = requests.post(url, data=body, headers=headers)
        print(body)
        print(self.rq.text)

关键修改点说明

  • 移除URL中的method参数:JSON RPC的POST请求不需要在URL里指定method,所有信息都封装在请求体的JSON中,这样服务器才能正确按照规范解析请求。
  • 添加Content-Type头:明确告诉服务器请求体是JSON格式,避免服务器以表单编码的方式解析你的JSON字符串,导致参数识别错误。

你可以试试修改后的代码,应该能解决当前的参数校验错误问题。

内容的提问来源于stack exchange,提问作者SamHDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:15:31