当请求重定向到错误页面时,如何使用 Python 从 URL 下载文件

问题描述 投票:0回答:1

我正在尝试使用 Python 下载以下文件: 达拉斯 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'}
python python-requests
1个回答
1
投票

id 参数包含重要的反斜杠。因此,您需要将 URL 更改为原始字符串。

该网站不需要任何标题。

因此:

import requests

url = r"https://www.dallascad.org/ViewPDFs.aspx?type=3&id=\\DCAD.ORG\WEB\WEBDATA\WEBFORMS\DATA%20PRODUCTS\DCAD2024_CURRENT.ZIP"

with requests.get(url, stream=True) as response:
    response.raise_for_status()
    with open("DCAD2024_CURRENT.ZIP", "wb") as output:
        for chunk in response.iter_content(4096):
            output.write(chunk)
© www.soinside.com 2019 - 2024. All rights reserved.