curl 有一个选项可以直接在磁盘上保存文件和标题数据:
curl_setopt($curl_obj, CURLOPT_WRITEHEADER, $header_handle);
curl_setopt($curl_obj, CURLOPT_FILE, $file_handle);
python-requests 中是否有相同的能力?
curl 有一个选项可以直接在磁盘上保存文件和标题数据:
curl_setopt($curl_obj, CURLOPT_WRITEHEADER, $header_handle);
curl_setopt($curl_obj, CURLOPT_FILE, $file_handle);
python-requests 中是否有相同的能力?
据我所知,请求不提供将内容保存到文件的功能。
import requests
with open('local-file', 'wb') as f:
r = requests.get('url', stream=True)
f.writelines(r.iter_content(1024))
请参阅request.Response.iter_content 文档。
iter_content(chunk_size=1, decode_unicode=False)
迭代响应数据。当在请求上设置stream=True时,这避免了一次将内容读入内存以进行大响应。块大小是它应该读入内存的字节数。这不一定是返回的每个项目的长度,因为可以进行解码。
如果您保存的不是文本文件,请不要使用f.writelines()
. 而是使用其中之一:
import requests
try:
r = requests.get(chosen, stream=True)
except Exception as E:
print(E)
# handle exceptions here.
# both methods work here...
with open(filepath, 'wb') as handle:
for block in r.iter_content(1024):
handle.write(block)
# or...
import shutil
with open(filepath, 'wb') as handle:
shutil.copyfileobj(r.raw, handle)
shutil
在处理丢失的文件夹或递归文件复制等方面更加灵活。它允许您保存请求中的原始数据,而无需担心块大小等。