Python在上传请求正文时请求读取响应

Python在上传请求正文时请求读取响应,python,upload,streaming,python-requests,Python,Upload,Streaming,Python Requests,我有一个服务,我需要上传内容,服务器在收到一定数量的数据后开始发送响应,而我的请求主体仍在上传 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=Tr

我有一个服务,我需要上传内容,服务器在收到一定数量的数据后开始发送响应,而我的请求主体仍在上传

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版本])都会在开始读取响应之前发送所有数据


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

请尝试contextlib.closing,从这里开始-您的响应中可能没有新行。您也可以尝试
获取响应数据。iter\u内容(大小):
这也取决于您的web服务器。也许它在上传过程中没有提供进度状态?我正要开始使用twisted编写自己的请求库。现在我知道了“treq”,这是我少做的一件事。将尝试并更新。