将post请求分配给变量是否会将其所有响应内容读入内存?

将post请求分配给变量是否会将其所有响应内容读入内存?,post,memory,iterator,python-requests,Post,Memory,Iterator,Python Requests,假设我们使用Python的请求给出了一个通用的POST请求 req=requests.post('http://someapi.someservice.com,files=files) req将是一个响应对象。在我的例子中,响应的.content可能非常非常大,因此我不希望将其全部读入内存。幸运的是,请求提供了一个迭代器,允许对内容进行迭代。但是,我的问题是,req是否已经包含响应的所有内容(因此所有内容都已读入内存),或者调用.content和是否启动下载,从而真正获取内容?这很重要,因为如

假设我们使用Python的
请求
给出了一个通用的POST请求

req=requests.post('http://someapi.someservice.com,files=files)

req
将是一个响应对象。在我的例子中,响应的
.content
可能非常非常大,因此我不希望将其全部读入内存。幸运的是,
请求
提供了一个迭代器,允许对内容进行迭代。但是,我的问题是,
req
是否已经包含响应的所有内容(因此所有内容都已读入内存),或者调用
.content
是否启动下载,从而真正获取内容?这很重要,因为如果将POST请求分配给变量已经将响应的内容读入内存,当然,使用
.iter\u content
也没什么区别。

您需要在请求中将
stream
参数设置为
True
,以避免将响应的全部内容下载到响应对象中:

req = requests.post('http://someapi.someservice.com', files=files, stream=True)
摘自以下文件:

默认情况下,当您发出请求时,响应的主体是 立即下载。您可以覆盖此行为并延迟 下载响应正文,直到访问
response.content
带有
参数的属性。。。您可以使用
Response.iter\u content()
Response.iter\u lines()
方法进一步控制工作流