【问题标题】:Can't make gRPC work with python requests rest api call无法使 gRPC 与 python 请求 rest api 调用一起工作
【发布时间】:2019-11-08 07:01:17
【问题描述】:

在连接 grpc 客户端/服务器以侦听休息请求时需要帮助。想要执行一个 post 请求

非常感谢任何帮助..

digestor.proto

import "google/api/annotations.proto";
service Digestor{
 rpc GetDigestor(DigestMessage) returns (DigestedMessage) {}
}

service DigestorRest {
  rpc GetDigestor(DigestMessage) returns (DigestedMessage) {
    option (google.api.http) = {
      get: "/v1/digest"
      body: "*"
    };
  }
}

在生成 pb2 文件之后。

grpc - 请求工作正常

curr_client = DigestorClient()
print(curr_client.get_digest("Test Message"))

我的休息/获取请求:

requests.get(url='http://localhost:46001/v1/digest')

应该返回正确的响应,但是我得到了

requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine('\x00\x00\x18\x04\x00\x00\x00\x00\x00\x00\x04\x00@\x00\x00\x00\x05\x00@\x00\x00\x00\x06\x00\x00 \x00þ\x03\x00\x00\x00\x01\x00\x00\x04\x08\x00\x00\x00\x00\x00\x00?\x00\x01\x00\x00\x08\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'))

【问题讨论】:

  • 您确定可以传递无效的 JSON 吗? {"Test Message"} 无效
  • 为了简化我将 proto 修改为一个简单的 get 请求,该请求返回一个示例字符串。它仍然抛出同样的错误。
  • 遇到同样的错误,@NovicePythonDev 你找到解决方案了吗?

标签: python-requests grpc grpc-python


【解决方案1】:

我假设您正在使用 GCP Transcoding 功能。如果您还没有尝试过本教程,请尝试完成示例步骤。

gRPC 协议基于 HTTP2 而不是 HTTP1。 requests 库是一个 HTTP1。 requests 报告的异常看起来像协议不匹配。因此,您的 GCP Endpoints 设置可能存在问题。

【讨论】:

  • 没错。你答对了。我在转码中遗漏了一些可以将 HTTP1 请求转码为 HTTP2 请求并输入 gRPC 的内容。然而,到目前为止,尝试各种替代方案还没有奏效。我没有使用 GCP,而是在本地机器上构建。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 1970-01-01
  • 2016-07-27
相关资源
最近更新 更多