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

如何用Python从url.bin获取图片?解决403 AccessDenied问题

解决请求url.bin返回403 AccessDenied的问题

我用Python的requests库请求指定URL(url.bin)下载图片时返回403状态码,代码如下:

import requests

# URL of the avatar image
avatar_url = "url.bin"

# Custom headers
headers = {
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36",
    "Accept": "*/*",
}

# Send a GET request to the avatar URL with headers
response = requests.get(avatar_url, headers=headers, stream=True)

print(f"Content-Type: {response.headers.get('Content-Type')}")

# Check if the request was successful   
if response.status_code == 200:
    # Save the image to a file
    with open("avatar_VGA23498.bin", "wb") as file:
        file.write(response.content)
    print("Avatar downloaded successfully.")
else:
    print(f"Failed to download avatar. Status code: {response.status_code}")

直接访问该URL时,页面返回错误:

<Error>
  <script/>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>96KTSVWPQR3YZHJW</RequestId>
   <HostId>WbjxwXXuo92OUkd+0VP8Pg1rvm6vFWg1s7ciyyxlfr/O4S62Q77yCHJzRb1YnJlIqvlpkP+LduV2wQBUxsDsOQ==    </HostId>
</Error>

可行的解决步骤

1. 补充完整请求头字段

很多云存储或CDN服务会校验多个请求头字段,仅User-Agent和Accept可能不够。你可以在浏览器中打开开发者工具(F12),找到该资源的合法请求,复制全部Request Headers,替换到代码中:

headers = {
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36",
    "Accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Referer": "https://example.com/",  # 替换为图片所在的页面URL
    "Connection": "keep-alive",
    "Sec-Fetch-Dest": "image",
    "Sec-Fetch-Mode": "no-cors",
    "Sec-Fetch-Site": "same-site"
}

2. 携带登录Cookie(如果需要)

如果该资源需要登录权限才能访问,把浏览器中登录后的Cookie字符串复制到请求头里:

headers["Cookie"] = "your_cookie_string_here"

3. 验证URL有效性与权限

  • 该URL可能是临时签名链接,已经过期,需要重新获取有效的签名地址。
  • 检查是否存在IP白名单限制,若有,可尝试使用对应白名单内的IP或合规代理访问。
  • 确认自身是否拥有该资源的访问权限,比如是否属于指定用户组。

4. 使用Session保持会话一致性

部分网站会校验会话状态,用requests.Session()发起请求可以维持会话信息:

import requests

session = requests.Session()
session.headers.update(headers)

response = session.get(avatar_url, stream=True)
# 后续保存文件的逻辑不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:02:44