You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:33:21