使用python将普通JSON发送到gRPC服务器

使用python将普通JSON发送到gRPC服务器,python,json,protocol-buffers,grpc,grpcurl,Python,Json,Protocol Buffers,Grpc,Grpcurl,我能够使用具有以下语法的grpcurl将请求发送到启用gRPC、启用反射的服务器之一: grpcurl--plaintext-d'{“测试输入”:“测试1 2 3”,“配置”:{“最大结果”:3}'本地主机:6565 myorg.myproject.v1alpha6.MyService.MyStub 这不需要从grpcurl了解protos。它非常完美,因为我在测试脚本中使用了它,我希望它尽可能简单 我已经能够利用它来编写一个非常简单的python脚本: 导入json 导入子流程 输入={“测试

我能够使用具有以下语法的grpcurl将请求发送到启用gRPC、启用反射的服务器之一:

grpcurl--plaintext-d'{“测试输入”:“测试1 2 3”,“配置”:{“最大结果”:3}'本地主机:6565 myorg.myproject.v1alpha6.MyService.MyStub

这不需要从grpcurl了解protos。它非常完美,因为我在测试脚本中使用了它,我希望它尽可能简单

我已经能够利用它来编写一个非常简单的python脚本:

导入json
导入子流程
输入={“测试输入”:“测试1 2 3”,“配置”:{“最大结果”:3}
结果=子流程。检查_输出(['grpcurl'、'--plaintext'、'-d',json.dumps(输入),'localhost:6565','MyStub']))
dict_result=json.load(结果)
但我不太喜欢调用外部进程

我在互联网上找到的所有文档都需要下载protos及其依赖项,并使用
protoc
进行编译。我可以做到,这不是问题的目的。这里的目标是使用Python使用JSON与服务器进行交换,而无需下载proto。就像grpcurl一样

这只能用python实现吗?

我认为这不是因为(优秀的)gRPCurl似乎没有提供API SDK,您可能希望能够从python编写脚本

正如您所注意到的,这只在支持反射的gRPC服务器上有效(没有proto或protoset)

我认为通过shell控制gRPCurl的方法可能是最好的方法。也许值得一次特性请求,看看其他人是否愿意将gRPCurl作为测试工具来驱动;这可能很有趣

或者,如果您不喜欢gRPCurl,那么可能还有其他支持反射的工具,可以通过Python进行scrpt。见:


gRPC在传输层使用HTTP2。 与任何其他RPC框架一样,它运行一个http服务器,可以使用基本的http post请求查询该服务器。 您基本上可以使用requests包触发对gRPC服务器的POST请求

import requests, json

payload = { "test_input": "Test 1 2 3", "config": { "max_results": 3 } }
response = requests.post("http://localhost:6565", data=json.dumps(payload))

为什么在请求模块支持的情况下使用
data=
而不是
json=
?代码发送json的字符串化版本,正如您在json.dumps语句中看到的那样
json=
您也可以使用json参数(在版本2.4.2中添加)直接传递dict,而不是自己编码dict,它将自动编码:
@ShabahatM.Ayubi我想尝试一下。但是,rpc方法的名称在哪里呢?在我的示例中,它是
myorg.myproject.v1alpha6.MyService.MyStub