我有一个服务,我需要向其上传内容,服务器在获取一定量的数据后开始发送响应,而我的请求正文仍在上传。
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。
我的问题是,直到整个文件上传后我才得到“响应”。关于如何克服这个问题的任何想法。
最佳答案
您今天无法通过请求来完成此任务。请求(以及底层库,包括 httplib
/http.client
[取决于您的 Python 版本])都会在开始读取响应之前发送所有数据。
一个可能能够处理这个问题的库(事实上,我相当确定这应该可以用它来实现)是 treq 。它使用 Twisted,它应该为您提供确定何时接收数据的方法,因此您需要做的就是注册一个回调来开始访问该数据。
关于Python请求在上传请求正文时读取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30864360/