Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。
当把get函数的stream参数设置成False时,它会立即开始下载文件并放到内存中,如果文件过大,有可能导致内存不足。
当把get函数的stream参数设置成True时,它不会立即开始下载,当你使用iter_content或iter_lines遍历内容或访问内容属性时才开始下载。需要注意一点:文件没有下载之前,它也需要保持连接。
iter_content:一块一块的遍历要下载的内容
iter_lines:一行一行的遍历要下载的内容
使用上面两个函数下载大文件可以防止占用过多的内存,因为每次只下载小部分数据。
参考一:
url_file = 'http://172.16.81.129:8000/api/v1/nms/sus/download/kedacom/dj000/3.0.0.0/common.zip/'
File = requests.get(url_file, stream=True)
if (os.path.exists('/opt/data/sus/version/kedacom/dj000/3.0.0.0')):
pass
else:
os.makedirs('//opt//data//sus//version//kedacom//dj000//3.0.0.0')
with open("/opt/data/sus/version/kedacom/dj000/3.0.0.0/common.zip",'wb+') as f:
# 分块写入文件
for chunk in File.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
f.close()
参考二:
r = requests.get(url_file, stream=True)
f = open("file_path", "wb")
for chunk in r.iter_content(chunk_size=512):
if chunk:
f.write(chunk)