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

使用Python Requests获取重定向URL:本地与Render服务器表现不一致

Flipkart短链接重定向获取问题(本地正常/Render Linux异常)

问题根源

Flipkart的短链接服务会基于请求的客户端标识(User-Agent)、IP环境等信息做拦截判断:本地Windows环境下Requests库的默认请求头会被识别为普通用户请求,返回3xx重定向头;而Render的Linux服务器环境的默认UA会被判定为自动化程序,直接返回200状态的原短链接页面,不返回Location重定向头。

修复方案

通过添加模拟浏览器的请求头伪装请求,同时增加元刷新重定向的兼容处理(部分短链接会用HTML元标签跳转):

import requests
import re

def get_original_url(short_url):
    try:
        # 模拟桌面浏览器的请求头
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
            'Accept-Language': 'en-US,en;q=0.9',
            'Connection': 'keep-alive'
        }
        
        response = requests.get(short_url, allow_redirects=False, headers=headers, timeout=10)
        
        # 优先检查HTTP重定向头
        if 'Location' in response.headers:
            return response.headers['Location']
        
        # 处理HTML元刷新重定向(部分短链接服务会用这种方式)
        if response.status_code == 200:
            refresh_match = re.search(r'<meta[^>]+http-equiv=["\']refresh["\'][^>]+content=["\']\d+;url=([^"\']+)["\']', response.text, re.IGNORECASE)
            if refresh_match:
                return refresh_match.group(1)
        
        return "Original URL not found in the response."
    except requests.exceptions.RequestException as e:
        return f"An error occurred: {str(e)}"

调试建议

  1. 在Render环境中临时添加日志,打印response.status_code和dict(response.headers),确认响应状态和头信息是否符合预期。
  2. 如果修改请求头后仍无效,可尝试更换User-Agent为其他主流浏览器标识,或检查Render的出口IP是否被Flipkart的服务限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:50:11