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

使用Python的requests库下载URL文件时遇重定向错误页的解决方法

解决Python下载Dallas DCAD文件被重定向到错误页面的问题

问题描述

尝试用Python下载Dallas DCAD 2024评估数据文件,浏览器中可正常下载,但Python请求会被重定向到错误页面,返回Errors.aspx的HTML代码而非ZIP二进制数据。

尝试的代码

import requests

url = 'https://www.dallascad.org/ViewPDFs.aspx?type=3&id=\\DCAD.ORG\WEB\WEBDATA\WEBFORMS\DATA%20PRODUCTS\DCAD2024_CURRENT.ZIP'
headers = {
    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
    }
r = requests.get(url, allow_redirects=True, headers=headers, timeout=None)
print(f"URL: {r.url}")
print(f"Status Code: {r.status_code}")
for i,h in enumerate(r.history):
    print(f"History[{i}] URL: {h.url}")
    print(f"History[{i}] Status: {h.status_code}")
    print(f"History[{i}] Headers: {h.headers}")

输出结果

URL: https://www.dallascad.org/Errors/ErrorPage.aspx?aspxerrorpath=/ViewPDFs.aspx
Status Code: 200
History[0] URL: https://www.dallascad.org/ViewPDFs.aspx?type=3&id=%5CDCAD.ORG%5CWEB%5CWEBDATA%5CWEBFORMS%5CDATA%20PRODUCTS%5CDCAD2024_CURRENT.ZIP
History[0] Status: 302
History[0] Headers: {'Cache-Control': 'private', 'Content-Type': 'text/html; charset=utf-8', 'Location': '/Errors/ErrorPage.aspx?aspxerrorpath=/ViewPDFs.aspx', 'Server': 'Microsoft-IIS/8.5', 'Content-Disposition': 'attachment;filename=DCAD2024_CURRENT.ZIP', 'X-AspNet-Version': '4.0.30319', 'X-Powered-By': 'ASP.NET', 'Date': 'Tue, 26 Mar 2024 14:35:36 GMT', 'Content-Length': '168'}

解决方案及修正代码

问题根源在于ASP.NET站点的会话验证和URL转义错误,修正方案如下:

  1. 修正URL转义:Python字符串中的反斜杠会被解析为转义字符,导致请求参数与浏览器不一致,直接使用URL编码后的完整链接或原始字符串。
  2. 维持会话Cookie:ASP.NET站点依赖Session ID验证请求合法性,用requests.Session()模拟浏览器会话。
  3. 补充Referer头:告诉服务器请求来自站点内部,符合正常访问流程。

修正后的代码:

import requests

# 使用URL编码后的完整请求链接
url = 'https://www.dallascad.org/ViewPDFs.aspx?type=3&id=%5CDCAD.ORG%5CWEB%5CWEBDATA%5CWEBFORMS%5CDATA%20PRODUCTS%5CDCAD2024_CURRENT.ZIP'
headers = {
    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36',
    "Referer": 'https://www.dallascad.org/'
}

# 初始化会话,维持Cookie状态
session = requests.Session()
# 先访问主页获取必要的Session Cookie
session.get('https://www.dallascad.org/', headers=headers)

# 发起下载请求
response = session.get(url, headers=headers, allow_redirects=True, timeout=None)

# 验证响应并保存文件
if 'attachment' in response.headers.get('Content-Disposition', '') or response.headers.get('Content-Type') == 'application/zip':
    with open('DCAD2024_CURRENT.ZIP', 'wb') as f:
        f.write(response.content)
    print("文件下载成功")
else:
    print("未获取到有效ZIP文件,响应状态:", response.status_code)
    print("响应内容预览:", response.text[:500])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:52:48