Python向ASP页面发送GET请求获取报告返回过期提示,Postman正常是何原因
报告下载请求返回过期的排查方案
你可以按以下优先级逐项排查遗漏的配置:
- 请求头校验遗漏:ASP站点通常会校验请求的
Referer、Origin、User-Agent头,你需要和浏览器/Postman的请求头完全对齐,特别是Referer需要设置为你上一步「选择报告」页面的完整URL,站点会通过该字段判断你是否是从合法流程跳转来的,直接空Referer访问会被判定为非法请求。你可以在session中全局设置头,或者给每个get请求加headers参数:
# 示例:给请求加正确的Referer头 headers = { "Referer": "https://website.com.au/Reports/SelectReport.asp", # 替换为你实际选报告的页面地址 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" } rw = session.get('https://website.com.au/Reports/ReportWindow.asp?' + report_urlencoded, headers=headers, allow_redirects=True)
- 临时会话参数遗漏:你需要确认「选择报告」的请求是否和后面的下载请求在同一个
session实例中,站点会在你选完报告后种下带报告ID的临时Cookie,如果你两个步骤用了不同的session、或者没执行选报告的请求直接调用下载接口,后台就会判定报告不存在返回过期。你可以打印session.cookies对比Postman中的Cookie,确认所有临时Cookie都已正确携带。 - 请求参数错误:你当前
generatereport.asp的时间戳是自己生成的,大概率不符合要求:通常这类接口的时间戳/一次性token是放在ReportWindow.asp的响应内容里的,你需要从rw.text中提取正确的参数,而不是自己生成当前时间。你可以先打印rw.text查看页面中是否有隐藏的token、reportId或者正确的generatereport调用地址。 - 请求时序问题:浏览器触发下载前会有窗口加载的间隔,你代码中两个请求间隔太短的话,后台还未完成报告的预生成,就会返回过期提示,可以在两个请求之间加2-3秒的等待:
import time if rw.status_code == 200: time.sleep(3) # 增加等待间隔,等待后台生成报告 # 从rw.text提取正确的generatereport参数后再调用 gr = session.get('https://website.com.au/reports/generatereport.asp?_=' + 你提取的正确参数, headers=headers)
- 重定向配置问题:Postman默认开启自动跟随重定向,你需要给Python的get请求显式加上
allow_redirects=True参数,同时可以打印rw.status_code确认是否是302类跳转被你误判为200处理。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

