grpcurl

2025/07/08 gRPC

#grpcurl 是一个命令行工具,用于与 gRPC 服务交互,类似于 curl 但专门用于 gRPC。

安装

# 使用 Go 安装

go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest

# 使用 brew(macOS)

brew install grpcurl

# 使用 apt(Ubuntu/Debian)

sudo apt install grpcurl

基本语法

grpcurl -plaintext -import-path . -import-path third_party -proto api/feature/v1/feature.proto -d ‘{“project”:”reader_free_all”, “name”: “scene-test”}’ localhost:50050 Feature/GetSceneWithFeatureSchemaByName

grpcurl [选项]  /

常用选项

  • -proto : 指定 proto 文件

  • -import-path : 指定 proto 文件的导入路径

  • -d : 指定请求数据(JSON 格式)

  • -plaintext: 使用明文连接(不使用 TLS)

  • -H <header>: 添加请求头

  • -v: 显示详细输出

  • -insecure: 跳过 TLS 证书验证

  • -reflect: 使用服务器反射(如果服务支持)

基本使用示例

1. 列出服务

bash

Apply to middleware.g…

Run

# 使用反射列出所有服务

grpcurl -plaintext localhost:8080 list

# 使用 proto 文件列出服务

grpcurl -proto api/mserve.proto -import-path . list

2. 列出方法

# 列出特定服务的方法

grpcurl -plaintext localhost:8080 list your.service.Name

# 使用 proto 文件

grpcurl -proto api/mserve.proto -import-path . list your.service.Name

3. 查看方法描述

# 查看方法的详细信息

grpcurl -plaintext localhost:8080 describe your.service.Name.MethodName

# 使用 proto 文件

grpcurl -proto api/mserve.proto -import-path . describe your.service.Name.MethodName

4. 发送请求

# 发送 JSON 数据

grpcurl -plaintext -d ’{“field”: ”value”}’ localhost:8080 your.service.Name/MethodName

# 从文件读取数据

grpcurl -plaintext -d @request.json localhost:8080 your.service.Name/MethodName

# 使用 proto 文件

grpcurl -proto api/mserve.proto -import-path . -plaintext -d ’{“field”: ”value”}’ localhost:8080 your.service.Name/MethodName

针对你的项目的示例

根据你的项目结构,可能的使用方式:

1. 使用 mserve.proto

# 列出 mserve 服务的方法

grpcurl -proto api/mserve.proto -import-path . list

# 调用预测服务

grpcurl -proto api/mserve.proto -import-path . -plaintext -d ’{

  ”model”: {“name”: ”your_model”},

  ”context”: {“scene”: ”your_scene”},

  ”items”: [{“id”: ”item1”}]

}’ localhost:8080 mserve.PredictorService/Predict

2. 使用 featuredump.proto

# 特征转储相关操作

grpcurl -proto api/featuredump.proto -import-path . -plaintext -d ’{

  ”feature_group”: ”your_group”,

  ”scene”: ”your_scene”

}’ localhost:8080 featuredump.FeatureDumpService/DumpFeature

实用技巧

1. 使用环境变量

export GRPC_SERVER=”localhost:8080”

export GRPC_OPTS=”-proto api/mserve.proto -import-path . -plaintext”

grpcurl $GRPC_OPTS -d ’{“field”: ”value”}’ $GRPC_SERVER service/method

2. 调试模式

# 显示详细的请求和响应信息

grpcurl -v -plaintext -d ’{“field”: ”value”}’ localhost:8080 service/method

3. 添加请求头

# 添加认证头或其他元数据

grpcurl -H ”Authorization: Bearer token” -plaintext -d ’{“field”: ”value”}’ localhost:8080 service/method

4. 流式请求

# 对于流式 gRPC 方法

echo ’{“field”: ”value1”}’   grpcurl -plaintext -d @ localhost:8080 service/StreamMethod

常见问题

  1. 连接拒绝: 确保 gRPC 服务正在运行,端口正确

  2. 方法不存在: 检查服务和方法名称是否正确

  3. proto 文件问题: 确保 proto 文件路径和导入路径正确

  4. TLS 错误: 对于本地开发,通常需要添加 -plaintext 选项

这样你就可以使用 grpcurl 来测试和调试你的 gRPC 服务了!

Search

    Table of Contents