`response.iter_content()`是如何工作的?
时间: 2024-09-09 12:16:04 浏览: 45
`response.iter_content()`是用于逐步从HTTP响应中读取内容的方法。它按块返回内容,而不是一次性加载整个响应到内存中。这样做的好处在于可以有效地处理大文件或者流式数据,避免内存溢出。当你需要以迭代器的形式逐个处理响应的内容时,如写入文件或者处理每个部分的数据,可以使用这个方法。
以下是使用`iter_content`的基本工作流程:
1. 设置`stream=True`在发起请求时,以便让`requests.get`或`requests.post`等函数返回一个可迭代的响应对象,而不仅仅是完整的HTML或其他数据。
```python
response = requests.get('http://example.com', stream=True)
```
2. 使用for循环遍历响应的`iter_content`,每次迭代得到一块小数据(默认大小为8192字节)。
```python
with open('output.txt', 'wb') as file:
for chunk in response.iter_content(chunk_size=8192):
if chunk: # 去除None值,这是连接关闭时可能会有的情况
file.write(chunk)
```
通过这种方式,你可以控制处理数据的速度,尤其是对于大数据或网络不稳定的情况。如果需要原始套接字响应,可以直接访问`r.raw`,但这通常不是首选,因为它不会自动解码内容。
阅读全文