【发布时间】:2025-11-25 16:00:01
【问题描述】:
我有一个通过 JSON-RPC 提供响应的 python 服务器。这是来自服务器的示例响应。
'{"jsonrpc": "2.0", "result": "Peer 1: local 10.10.0.2 remote 10.10.0.1 state CONNECT\\nPeer 2: local 10.10.0.18 remote 10.10.0.17 state ESTABLISHED\\nPeer 3: local 10.10.0.10 remote 10.10.0.9 state ESTABLISHED", "id": "839732f9-cf36-46ff-8b9b-6120250d9ce5"}'
这是我需要发送到服务器的请求:
'{"method":"echo","jsonrpc":"2.0","params":["test_params"],"id":"839732f9-cf36-46ff-8b9b-6120250d9ce5"}'
这是我使用 go 语言的客户:
package main
import (
"fmt"
"log"
"net"
"net/rpc/jsonrpc"
)
type Args struct {
jsonrpc, id string
}
func main() {
conn, err := net.Dial("tcp", "11.21.22.221:8080")
if err != nil {
panic(err)
}
defer conn.Close()
args := Args{"2.0", "d87198f0-af92-49f8-9a7d-ab8bed5c4d17"}
var reply string
c := jsonrpc.NewClient(conn)
err = c.Call("echo", args, &reply)
if err != nil {
log.Fatal("error:", err)
}
fmt.Printf("Response: %d", reply)
}
但是,当我运行这个客户端时,它没有在参数中发送任何东西。相反,它发送的是这样的空参数:
'{"method":"echo","params":[{}],"id":0}\n
有人可以帮我说出我犯了什么错误吗?我是 Go 语言的新手。
谢谢。
【问题讨论】:
-
我怀疑这与 jsonrpc 和 id 是小写的有关,因此是 Args 结构的私有。如果您调用的 API 需要小写 args,您可以使用 struct 标签来解决这个问题
-
非常感谢。该标记在一定程度上有助于添加参数,但是,我需要像这样将标签添加到实际的 JSON 本身 - 如何添加 jsonrpc 并编辑 id 值`'{"method":"echo"," jsonrpc":"2.0","params":["test_params"],"id":"839732f9-cf36-46ff-8b9b-6120250d9ce5"}' `
-
@rob74 或有人请告诉我如何编辑 JSON RPC 请求中传递的 id 值,甚至添加 jsonrpc 版本以及 JSON(2.0 需要 jsonrpc)?