【问题标题】:How to make call to gRPC server over HTTP/1.1 from cURL command or in internet browser如何从 cURL 命令或 Internet 浏览器通过 HTTP/1.1 调用 gRPC 服务器
【发布时间】:2019-10-28 01:12:16
【问题描述】:

我在 protobuf 文件中添加了以下新代码并编译以获取生成的 grpc_pb 文件。

service EchoService {
  rpc Echo(EchoMessage) returns (EchoMessage) {
    #-----New code start-----
    option (google.api.http) = {
      post: "/v1/echo"
      body: "*"
    };
    #-----New code end------
  }
}

来自在命令下面执行的 cURL 命令

curl -X POST -k https://localhost:10000/v1/echo -d '{"Key": "Value"}'

发出上述请求后,无法得到正确的响应。

我的疑问是,准备响应发送回调用者需要任何服务器端代码更改吗?如果是这样,请建议我使用代码(Java)以及如何提出请求。如果没有,我们需要如何向 grpc 发起 http 请求?

非常感谢工作示例。

【问题讨论】:

    标签: java grpc grpc-java proto


    【解决方案1】:

    为了在没有客户端的情况下测试 gRPC 服务器,我们必须使用 grpcurl 而不是 curl。请看https://github.com/fullstorydev/grpcurl

    但是,根据我的经验,需要使其正常工作。首先,请确保您的服务支持Reflection,您可以从https://github.com/sourcegraph/gophercon-2018-liveblog/issues/27 了解它。跨编程语言有不同的Reflection方法。我的建议是,只在开发阶段执行此操作,否则,人们可能会查询您的 gRPC 端点。也许您可以使用if() 为其设置条件块。对于 Golang,我这样做了

    import "google.golang.org/grpc/reflection"
    
    if os.Getenv("GO_ENV") == "development" {
        reflection.Register(s)
    }
    

    然后,您需要了解 gRPC 服务器中的可用服务。有两种方法可以知道结构。首先你可以从你的 proto 文件中读取它们,其次通过执行命令grpcurl localhost:10000 list

    • 如果你想从你的 proto 文件中读取,路径应该是packageName.Service/rpcMethodName。因此,根据您的原型,它应该类似于EchoService/Echo,或者如果您有包名,它将是packageName.EchoService/Echo
    • 如果你更喜欢grpcurl localhost:10000 list,只需输入这些命令,它就会输出服务路径。

    在本地测试并且没有设置 SSL/TLS 时最后要注意的一点,请使用-plaintext 选项,否则会告诉你 TLS 握手失败。

    示例命令,根据您的原型,本地调用如下所示:

    grpcurl -plaintext -d '{"Key": "Value"}' 127.0.0.1:10000 EchoService/Echo

    希望对你有帮助。


    2020 年 6 月 30 日更新:

    在使用 gRPC 几个月后,我发现了另一个有趣的 gRPC 工具:

    【讨论】:

      【解决方案2】:

      调用远程过程的唯一方法是使用生成的 gRPC 客户端,该客户端执行来自 gRPC wire format 的 protobuf 消息的所有解组。

      参见official documentation中Java客户端和服务器的实现示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-29
        • 2012-05-28
        • 1970-01-01
        • 1970-01-01
        • 2014-11-21
        • 1970-01-01
        • 2017-05-02
        • 2021-08-11
        相关资源
        最近更新 更多