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

为何用Python requests下载Zip文件需添加User-Agent请求头?

问题

我尝试使用Python的requests库从URL下载一个Zip文件,编写了如下代码:

import requests

r = requests.get(file_url)
file = open("file.zip","wb")
file.write(r.content)
file.close()

但打开下载后的文件时,系统提示它不是Zip文件,无法正常打开。之后我从浏览器网络面板复制了请求头信息添加到请求中,下载就成功了,添加的请求头如下:

headers = {'Host': 'www.bseindia.com',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/114.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'DNT': '1',
'Alt-Used': 'www.bseindia.com',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-User': '?1',
'Sec-GPC': '1'}

我逐个移除请求头测试后发现,User-Agent是必须的。作为Web技术新手,我想了解为何必须添加该请求头才能成功下载Zip文件,以及无请求头时失败的原因。

解答

1. User-Agent的核心作用

User-Agent是HTTP请求头里的标识字段,用来告诉服务器发起请求的客户端类型——是浏览器、自动化脚本还是其他工具。requests库默认会自动带上类似python-requests/2.31.0的User-Agent,直接暴露这是Python脚本发起的请求。

2. 服务器要求User-Agent的原因

  • 反爬虫拦截:像bseindia这类网站会通过识别User-Agent过滤自动化请求,避免被爬虫批量抓取数据。当服务器看到python-requests这类标识时,会拒绝返回真实的Zip文件,转而返回HTML格式的错误页面(比如403禁止访问页面)。
  • 内容适配策略:部分服务器会根据客户端类型返回不同内容,给浏览器返回正常资源,给非浏览器客户端返回验证页面或简化内容。
  • 负载保护:自动化脚本可能短时间发起大量请求,服务器通过限制非浏览器标识的请求,避免资源被过度消耗。

3. 无User-Agent时失败的具体原因

你以为没手动加User-Agent就没有这个字段?其实requests会自动添加默认的python-requests标识。服务器识别出这是脚本请求后,没有返回你需要的Zip文件,而是返回了错误页面的HTML代码。你把这段HTML内容存成了file.zip,自然不是有效的压缩文件,系统就会提示“不是Zip文件”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:22:52