Python requests模块下载流timeout失效问题解决

作者: RedFree 分类: Python 发布时间: 2017-08-17 10:52 ė7,037 次访问 6没有评论

官方说明:

超时

你可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:

>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)

注意

timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)If no timeout is specified explicitly, requests do not time out.

解决代码示例(stream参数)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
下载期间超时有效且可以指定下载内容的最大大小
'''
import time
import requests
url = "http://www.xxxx.com"
timeout = 15
body = []
start = time.time()
response = requests.get(url, verify=False, stream=True)
for chunk in response.iter_content(1024):
    body.append(chunk)
    if time.time() > (start + timeout):
        break
    if len(body) >= 64:  # 只取response中的64 * 1024B内容
        break
content = b''.join(body)

本文出自 RedFree's Blog,转载时请注明出处及相应链接。

本文永久链接: http://py4.me/blog/?p=559

发表评论

电子邮件地址不会被公开。

Ɣ回顶部