【问题标题】:Python requests reading response while uploading request bodyPython在上传请求正文时请求读取响应
【发布时间】:2015-09-01 01:57:24
【问题描述】:

我有一个需要上传内容的服务,服务器在获得一定数量的数据后开始发送响应,而我的请求正文仍在上传。

headers = {'Content-Type': 'application/octet-stream',  'Expect': '100-continue', 'Connection' :'keep-alive'}
url = "https://MY_API_URL/WEBSERVICE"
response = requests.put(url, headers=headers,stream=True, data=data_gen(fh))
lines = response.iter_lines()
for line in lines:
    print line

data_gen 是我的生成器函数,它接受一个非常大的文件的文件句柄,每次迭代产生 4KB。

我的问题是在整个文件上传之前我没有得到“响应”。关于如何克服这个问题的任何想法。

【问题讨论】:

  • 请从这里尝试 contextlib.closure - docs.python-requests.org/en/latest/user/advanced/…
  • 您的回复中可能没有换行。你也可以试试for data in response.iter_content(size):
  • 这也取决于您的网络服务器。也许它在上传过程中没有提供进度状态?

标签: python upload streaming python-requests


【解决方案1】:

您今天无法通过请求完成此操作。请求(以及底层库,包括 httplib/http.client [取决于您的 Python 版本])都会在开始读取响应之前发送所有数据。

treq 是一个可以处理这个问题的库(事实上,我相当肯定这应该是可行的)。它使用 Twisted,它可以让您确定何时收到数据,因此您需要做的就是注册一个回调以开始访问该数据。

【讨论】:

  • 我正要开始使用 twisted 编写自己的请求库。现在我知道了 "treq" ,这对我来说少了一个项目。将尝试并更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
相关资源
最近更新 更多