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

如何用Python登录门户下载文件?请求未授权问题排查

解决Oracle BI门户Excel下载未授权问题

核心问题分析

你的代码直接通过GET请求下载链接并传递登录参数,不符合该Oracle BI门户的认证流程——这类门户需要先通过POST请求完成登录,获取会话Cookie后,再用已认证的会话请求下载资源。直接GET传参不会触发认证,因此返回未授权。

修正步骤与代码

  1. 使用requests.Session()管理会话,自动保存登录后的Cookie
  2. 先POST到登录端点完成认证
  3. 用已认证的会话请求下载链接
import requests
from io import BytesIO
import pandas as pd

# 初始化会话,统一设置请求头
session = requests.Session()
session.headers.update({
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'
})

# 登录端点(Oracle BI标准登录地址,若失效需抓包确认实际地址)
login_url = 'https://totoro.banrep.gov.co/analytics/saw.dll?Logon'
login_payload = {
    'NQUser': 'publico',
    'NQPassword': 'publico123',
    'NQLocale': 'es_ES'  # 补充语言参数,抓包可验证是否需要
}

# 执行登录
login_resp = session.post(login_url, data=login_payload)
# 简单验证登录状态(可根据响应内容调整判断逻辑)
if login_resp.status_code == 200 and 'Logon' not in login_resp.url:
    print("认证成功")
else:
    print(f"认证失败,状态码:{login_resp.status_code},响应片段:{login_resp.text[:300]}")

# 发起下载请求
download_url = 'https://totoro.banrep.gov.co/analytics/saw.dll?Go&ViewID=o%3ago%7er%3areport&Action=Download&SearchID=g8of6g3fbae0jp7va1ru23h9rm&ViewName=compoundView%211&fmapId=I5IMHw&ViewState=d8lnokl6jm050tk65k2v7mq8k6&ItemName=1.2.5.IPC_Serie_variaciones&path=%2fshared%2fSeries%20Estad%c3%adsticas_T%2f1.%20IPC%20base%202018%2f1.2.%20Por%20a%c3%b1o%2f1.2.5.IPC_Serie_variaciones&Format=excel2007&Extension=.xlsx&bNotSaveCommand=true'

download_resp = session.get(download_url)

# 验证下载结果
if download_resp.status_code == 200 and 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' in download_resp.headers.get('Content-Type', ''):
    xls = pd.ExcelFile(BytesIO(download_resp.content))
    print(f"Excel文件加载成功,工作表:{xls.sheet_names}")
else:
    print(f"下载失败,状态码:{download_resp.status_code},响应片段:{download_resp.text[:300]}")

额外注意事项

  • 登录端点验证:如果saw.dll?Logon无法成功登录,打开浏览器开发者工具(F12),手动登录时观察「网络」标签下的POST请求地址,替换为实际登录URL。
  • 参数补充:抓包查看登录表单的所有字段(比如可能有NQTimeZone等隐藏参数),全部加入login_payload。
  • Azure Function适配:在requirements.txt中添加依赖包:
    requests>=2.31.0
    pandas>=2.2.1
    openpyxl>=3.1.2
    
  • 错误排查:若仍失败,打印登录/下载的响应内容,查看具体未授权原因(比如Cookie未正确保存、参数缺失)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:43:18