如何在Python中正确发送带params参数的JSON-RPC POST请求?
解决方法
你的代码失败的核心原因是没有以JSON格式发送请求数据:requests.post的第二个参数默认对应data字段,会把字典当作表单数据提交,但JSON-RPC接口要求请求体是JSON格式,且需要正确的Content-Type: application/json请求头。
正确的Python实现代码如下:
import requests # 构造JSON-RPC请求体 payload = { "jsonrpc": "2.0", "id": 7, "method": "eth_call", "params": [ { "from": "0x0000000000000000000000000000000000000000", "data": "0x41108cf20000000000000000000000000000000000000000000000000000000000000032", "to": "0xf86048dff23cf130107dfb4e6386f574231a5c65" }, "latest" ] } # 通过json参数传递请求体,requests会自动处理序列化和请求头 response = requests.post('https://mainnet.optimism.io/', json=payload) # 输出响应结果 print(response.json())
关键说明
- 使用
json=payload参数传递请求体时,requests会自动完成JSON序列化,并设置Content-Type: application/json请求头,完全符合JSON-RPC接口的要求。 - 原代码直接将字典作为第二个参数传入,会被解析为
application/x-www-form-urlencoded格式的表单数据,与接口预期格式不匹配,导致请求失败。
内容的提问来源于stack exchange,提问作者unter_983
相关产品推荐
相关产品推荐

