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

使用urllib.request下载网络图片出现HTTP 403 Forbidden错误如何解决

错误产生原因
  • 该错误是目标站点的反爬策略拦截导致的:绝大多数提供图片存储的公共站点会校验HTTP请求的User-Agent(用户代理)字段,用来识别非浏览器的爬虫请求。
  • 你使用的urllib.request默认发送的请求会携带Python-urllib/[版本号]格式的UA标识,很容易被站点识别为爬虫,直接返回403 Forbidden拒绝访问。GeeksforGeeks的示例资源没有配置这类反爬校验,因此可以正常下载。
解决方案

方案1:给urllib请求添加自定义请求头,伪装成浏览器访问

修改代码手动构造请求对象,添加浏览器UA,示例代码如下:

import urllib.request

# 构造请求对象,添加浏览器User-Agent,这里用Chrome的UA示例
req = urllib.request.Request(
    "http://image.prntscr.com/image/ynfpUXgaRmGPwj5YdZJmaw.png",
    headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}
)

# 发送请求并保存文件
with urllib.request.urlopen(req) as response, open("gfg.png", "wb") as f:
    f.write(response.read())

方案2:使用更简洁的requests库实现(推荐)

requests库对请求头配置做了更友好的封装,使用前先执行安装命令:pip install requests
示例代码如下:

import requests

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}
response = requests.get("http://image.prntscr.com/image/ynfpUXgaRmGPwj5YdZJmaw.png", headers=headers)

# 请求成功则保存文件
if response.status_code == 200:
    with open("gfg.png", "wb") as f:
        f.write(response.content)

内容的提问来源于stack exchange,提问作者patricebailey1998

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:24:04