如何通过requests获取响应后直接保存文件到本地并实现错误处理?
如何用requests直接保存响应内容到本地并处理错误?
没问题,我来帮你调整代码逻辑——既然已经用requests.get()拿到了响应,完全没必要再调用wget重复发起请求,直接把响应内容写入本地文件就好,同时保留你原本的错误处理逻辑。
修改后的完整代码示例
import requests from requests import HTTPStatus # 和你原代码里的status模块兼容,按需替换即可 # 假设你已经定义过这个自定义异常类 class BadRequestError(Exception): pass def save_url_to_local(url, save_file_path): # 发起请求并获取响应 response = requests.get(url) # 状态码校验,不符合则抛出异常 if response.status_code != HTTPStatus.OK: raise BadRequestError(f"请求失败,返回状态码: {response.status_code}") # 将响应内容写入本地文件 with open(save_file_path, 'wb') as file: file.write(response.content) # 可以返回成功标识或写入的字节数,按需选择 return len(response.content)
关键细节说明
- 用
response.content获取二进制响应内容:这是通用写法,适合所有类型的文件(图片、PDF、压缩包、文本文件等),如果只处理纯文本,也可以用response.text,但content兼容性更强。 with open(...)上下文管理器:能自动处理文件的打开和关闭,避免手动操作导致的资源泄漏问题。- 去掉了
subprocess.call(['wget', url]):既减少了额外的进程开销,也避免了重复发起HTTP请求,效率更高。
调用示例
try: saved_size = save_url_to_local("https://example.com/sample.jpg", "./local_sample.jpg") print(f"文件保存成功,大小: {saved_size} 字节") except BadRequestError as err: print(f"保存失败: {err}")
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

