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

Python requests设置allow_redirects=True仍无法获取重定向URL怎么办

问题描述

尝试从基准URL获取对应重定向目标URL时,请求始终返回原始基准URL,无法获取跳转后的目标地址,相关实现代码如下:

url = apiurl.de/apiexample'
servers = session.get(url, headers=headers).result().json()['results']
for server in servers:
    server_id = server['id']
    
    invite_url = f'apiurl.com/api'

    user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'
    
    s = requests.Session()
    s.headers['User-Agent'] = user_agent
    r = s.get(invite_url, allow_redirects=True, timeout=10)

    print(f'[redirected url]: {r.url}')

问题运行截图

可行解决思路
  • 先修复代码基础错误:
    第一行URL字符串开头缺失单引号,且url、invite_url两个地址都没有加http://或https://协议前缀,requests无法识别无协议头的地址为合法请求地址;另外代码中提取了server_id但没有拼接到invite_url中,请求的根本不是对应服务的专属邀请地址,自然拿不到正确跳转结果。
  • 先确认跳转类型:
    临时将allow_redirects参数设为False发起请求,打印响应状态码和响应头中的Location字段:
    r = s.get(invite_url, allow_redirects=False, timeout=10)
    print(r.status_code)
    print(r.headers.get('Location'))
    
    如果返回301/302/303/307/308这类3xx状态码,且Location字段有值,属于标准HTTP重定向,开启allow_redirects=True后requests会自动跟进跳转,最终r.url就是目标地址;如果返回200状态码,说明跳转逻辑写在返回的HTML页面中(JS跳转、meta标签跳转),不属于HTTP层重定向,requests不会自动解析执行前端代码,自然不会跳转
  • 绕过站点反爬校验:
    大部分站点不会仅靠User-Agent判定请求合法性,需要补全Accept、Accept-Language、Referer等常规浏览器请求头;涉及Cookie校验的场景,先请求站点首页拿到合法Cookie再发起目标地址请求,避免被反爬拦截返回原页面、不触发跳转逻辑。
  • 针对性处理非HTTP重定向场景:
    对于前端跳转的情况,直接用正则从响应HTML文本中匹配目标跳转URL即可,不需要额外执行JS;如果跳转链路有加密参数、JS校验,再使用支持JS渲染的请求工具模拟浏览器访问。
  • 前置校验链路:
    先把目标URL复制到浏览器隐身窗口手动访问,确认实际跳转流程,再将代码中的请求头、Cookie、请求参数和浏览器真实请求参数逐一比对,排查代理、域名拦截、重定向死循环等环境问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:45:37