【发布时间】:2019-04-17 12:52:08
【问题描述】:
我正在尝试与一个 RESTful API 交互,该 API 在 post 中接受 application/x-protobuf 对象。
.proto 示例对象:
message register
{
required string name = 1;
required int32 id = 2;
}
使用请求,我可以将此消息发布到服务器并收到 200。
例如
register = protobuf_pb2.register()
register.name = "foo"
register.id = 1
response = requests.request("POST", url, data=register.SerializeToString(), headers=headers)
当我以 SerializeToString() 格式查看此有效负载时,它显示类似于
b'\n\t\n\x03foo\x10\x01'
作为健全性检查,然后我可以创建一个新的消息对象和 .ParseFromString() 将其恢复为正确的消息格式。
服务器上的第二个 uri 允许您发送 GET 请求来检索相同的数据。所以我使用了以下内容:
register = protobuf_pb2.register()
response = requests.request("GET", url, headers=headers).content
register.ParseFromString(response)
响应返回
b'foo:1\n'
ParseFromString 返回异常
DecodeError('解析消息出错',)
我是否在某处遗漏了一步? .content 有效载荷是否应该在解析之前以某种方式编码?
非常感谢。
【问题讨论】:
标签: python rest protocol-buffers