问题描述
我可以使用如下语法的grpcurl将请求发送到我们的一个启用GRPC、启用反射的服务器:
grpcurl --plaintext -d '{"test_input": "Test 1 2 3", "config": { "max_results": 3 }}' localhost:6565 myorg.myproject.v1alpha6.MyService.MyStub
这不需要了解grpcurl的Protos。它非常完美,因为我正在一个测试脚本中使用它,我希望尽可能地保持简单。
我已经能够利用它来编写一个非常简单的python脚本:
import json
import subprocess
input = { "test_input": "Test 1 2 3", "config": { "max_results": 3 } }
result = subprocess.check_output(['grpcurl', '--plaintext', '-d', json.dumps(input), 'localhost:6565', 'MyStub'])
dict_result = json.loads(result)
但我不太喜欢不得不调用外部进程。
我在互联网上找到的所有文档都需要下载Protos及其依赖项,并使用protoc
编译它们。我可以做到这一点,这不是问题的目的。这里的目标是使用Python通过JSON与服务器进行交换,而不需要下载原型。就像使用grpcurl一样。
只能使用python完成此操作吗?
gRPCurl
我认为不是因为gRPCurl似乎没有提供您希望能够从推荐答案编写脚本的api|sdk。
正如您注意到的,这仅在支持反射的GRPC服务器上起作用(没有Proto或Protoset)。
我认为您通过外壳控制gRPCurl的方法可能是最好的方法。这可能值得提出一个功能请求,看看其他人是否愿意将gRPCurl作为测试工具;这可能会很有趣。
或者,如果您不执着于gRPCurl,那么可能有其他支持反射的工具可以由Python编写。请参阅:
https://github.com/grpc-ecosystem/awesome-grpc#tools-test
这篇关于使用Python将纯JSON发送到GRPC服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!