Python从网页下载ZIP文件遇302重定向无限循环问题求解
解决Caixa Loteria ZIP文件下载的302无限重定向问题
这个问题的核心是服务器会拒绝没有浏览器标识的请求,导致重定向循环。网站的反爬机制会校验请求的User-Agent头,默认的Python请求库(urllib/requests)不带这个头的话,服务器会反复重定向,最终触发无限循环错误。
下面是两种可行的解决方案:
方案1:使用requests库(推荐,更简洁)
requests默认会处理重定向,只要添加正确的请求头即可:
import requests url = "http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_megase.zip" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } # 发送请求并允许重定向(默认开启) response = requests.get(url, headers=headers, allow_redirects=True) # 保存文件 with open("D_megase.zip", "wb") as f: f.write(response.content)
方案2:使用urllib库
如果坚持用urllib,需要手动添加请求头,并确保重定向处理正常:
from urllib.request import Request, urlopen url = "http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_megase.zip" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } # 创建带请求头的请求对象 req = Request(url, headers=headers) response = urlopen(req) # 保存文件 with open("D_megase.zip", "wb") as f: f.write(response.read())
为什么这样能解决?
- 添加
User-Agent头模拟浏览器请求,让服务器认为这是合法的访问,不会触发异常重定向。 - requests默认会自动处理302重定向,urllib的
Request对象在带正确头的情况下也能正常跟随重定向,避免循环。
内容的提问来源于stack exchange,提问作者Gustavo Amarante
相关产品推荐
相关产品推荐

