用Python 判断http下载超时
2017-12-22 本文已影响0人
阳光_8af8
由于对http请求理解不深入,开始我一直是使用的requests里的timeout参数,即:
req = requests.get(url ,stream = True,timeout = 5)
但在实际的测试中发现,当我们下载大文件的时候,会远远超过5秒,而系统也不会出现异常,这是为什么呢?原因很简单,因为这里的timeout,仅仅是指从发起请求,到服务器响应给我们这中间的时间,而下载过程其实是已经响应成功了,因此就不能通过这种方法来自动中断http下载连接。
要优化这一问题,具体可如下:
STime = time.time() S #文件下载开始时间
n = requests.get(url ,stream = True)
f = open('test','wb')
for chunk in n.iter_content(chunk_size=65536):
if chunk: # filter out keep-alive new chunks
NTime = time.time()
if (NTime - STime > 10): S #判断文件片已下载时间,如果超过10秒,则自动中断线程
raise TooSlowException
f.write(chunk)
f.flush()
f.close()
class TooSlowException(Exception):
"""
用于判断下载速度过慢的异常类
"""
pass
这段代码实际上在分块读取的过程中,加上的时间的判断,并且在每一块保存的时候,和初始时间进行相减比较,就能得到当前下载的时间并判断超时了。