如何通过 curl 调用 Go 标准库 RPC 服务(JSON-RPC 协议)

本文详解如何使用 curl 等通用 HTTP 工具跨语言调用 Go net/rpc 服务,重点基于 rpc/jsonrpc 实现的 JSON-RPC 1.0 协议,涵盖请求构造、序列化规则、常见错误及最佳实践。 本文详解如何使用 curl 等通用 http 工具跨语言调用 go `net/rpc` 服务,重点基于 `rpc/jsonrpc` 实现的 json-rpc 1.0 协议,涵盖请求构造、序列化规则、常见错误及最佳实践。Go 标准库的 net/rpc 默认采用自定义二进制协议(Gob),不兼容 HTTP 直接交互。若需通过 curl 或其他非 Go 客户端调用,必须启用 rpc/jsonrpc 子包提供的 JSON-RPC 1.0 支持------它将 RPC 请求/响应封装为标准 JSON 格式,并通过 HTTP POST(而非 CONNECT)传输。? 正确的服务端配置(关键前提)首先,服务端需显式注册 JSON-RPC 处理器,而非默认的 Gob RPC:package mainimport ( "log" "net/http" "net/rpc" "net/rpc/jsonrpc")type Args struct{ A, B int }type Quotient struct{ Quo, Rem int }type Arith intfunc (t *Arith) Multiply(args *Args, reply *int) error { *reply = args.A * args.B return nil}func main() { rpc.Register(new(Arith)) rpc.HandleHTTP() // 注册 /_goRPC 路由(用于 Gob) // ? 关键:为 JSON-RPC 单独注册处理器 http.Handle("/goRPC", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 设置 Content-Type 避免客户端解析失败 w.Header().Set("Content-Type", "application/json") jsonrpc.ServeHTTP(w, r) })) log.Println("RPC server listening on :1234") log.Fatal(http.ListenAndServe(":1234", nil))}?? 注意:/goRPC(末尾带下划线)是 Go jsonrpc 包约定的默认路径,不可省略或修改;而 /_goRPC(无下划线)仅用于 Gob 协议,curl 无法直接通信。? 正确的 curl 请求格式(POST + JSON)curl 必须使用 POST 方法(不是 CONNECT),并发送符合 JSON-RPC 1.0 规范的请求体: 幻导航网 发现优质实用网站,开启网络探索之旅!

相关推荐
l1t10 小时前
DeepSeek总结的使用实体-组件-系统和基于存在性处理进行Python编程39-40
开发语言·python
瀚高PG实验室10 小时前
pgsql-ogr-fdw
数据库·postgresql·瀚高数据库·highgo
IvorySQL10 小时前
PostgreSQL 技术日报 (6月5日)|PG19 Beta1 上线,PGConf.PL 2026开启征稿
数据库·postgresql·区块链
曾阿伦11 小时前
Python 搭建简易HTTP服务
开发语言·python·http
abcy07121311 小时前
pycharm python sqlalchemy mysql增删改查实例csdn
数据库·oracle
MIUMIUKK11 小时前
从语法层面,看懂 Python 的特殊处
java·开发语言·python
无风听海11 小时前
IndexedDB 深度指南 浏览器中的事务型对象数据库
前端·数据库
着迷不白11 小时前
第一部分:认识python
开发语言·python
hujinyuan2016011 小时前
2026年3月 中国电子学会青少年软件编程(Python)三级考试试卷 真题及答案
java·python·算法
开开心心就好11 小时前
支持多显示器的Windows高效分屏工具
运维·python·科技·游戏·计算机外设·ocr·powerpoint