python-3.x - 如何在 Python 中使用 protobuf 有效负载发出 http 请求

标签 python-3.x http protocol-buffers

我有一个服务,它公开了两个交换 protobuf 消息(有效负载)的 REST API。到目前为止,我一直在使用 HTTP/JSON,并且在 Python 中通过使用 requests 和 json 包可以很容易地使用 JSON 有效负载发出 HTTP 请求。我正在努力理解如何发出在有效负载中包含 protobuf 消息的请求。我认为已经在互联网上进行了足够的搜索,但没有任何显着的结果。
有人经历过吗?她/他可以分享一些例子吗?

具体来说,我有一个 message_pb这是我实例化的 protobuf 消息对象(基于 protobuf 编译器生成的 python 代码)并用我的数据填充。

我尝试使用 requests 包发出 PUT 请求,如下所示:

requests.put(url, data=message_pb, header={'Content-Type': 'application/octet-stream'})

这是我收到的回溯:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 126, in put
    return request('put', url, data=data, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 508, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 460, in send
    for i in request.body:
TypeError: 'ObjectStatistics' object is not iterable

最佳答案

Zaytsev Dmitry 的评论似乎对我有用。

resp = requests.put(url, headers={'Content-Type': 'application/protobuf'}, data=message_pb.SerializeToString())

关于python-3.x - 如何在 Python 中使用 protobuf 有效负载发出 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46948826/

相关文章:

python-3.x - 安排测试以验证部署的 Streamlit 应用程序是否正常工作

python - Streamlit:如何在缓存中存储变量值

python-3.x - Sqlalchemy 按计算的日期时间进行过滤 Hybrid_property

http - Golang negroni 和 http.NewServeMux() 问题

java - 使用 Protocol Buffers 时,这里可能会导致 java.lang.OutOfMemoryError 的原因是什么?

python - 如何将许多列的产品创建为新列 pandas

Angular http post 请求内容类型从 'text/plain' 到 'application/json'

PHP/ curl : inspecting response headers before downloading body

java - Java 中的 Protocol Buffer 编码

.net - .NET Protocol Buffer 库中的差异