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

URL去短链时添加自定义请求头导致无法正常解析的问题

短链还原失效问题排查方案

核心原因分析

添加自定义User-Agent后短链无法正常跳转,本质是目标短链服务的反爬机制对请求的UA特征或请求头完整性做了校验,拒绝了不符合要求的请求。

具体排查方向与解决办法

  • UA格式/内容触发拦截
    部分短链平台会拉黑老旧UA(如你使用的MSIE 9.0),或对fake_useragent生成的批量UA做了标记。
    解决:复用requests默认UA(不带自定义头时的UA),或使用当前主流浏览器的UA。先打印默认UA:

    print(requests.session().headers['User-Agent'])
    

    然后将该值替换到自定义headers中,而非使用老旧或随机生成的UA。

  • 请求头缺失必要字段
    仅设置UA和Accept-Language会导致请求头不完整,被判定为异常请求。正常浏览器请求会携带Accept、Connection等字段。
    解决:在默认headers基础上修改UA,而非覆盖整个headers:

    session = requests.session()
    # 保留默认headers,仅替换UA
    session.headers.update({
        '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-Language': 'en-US, en;q=0.5'
    })
    
  • 代理与UA组合触发反爬
    免费代理本身可能已被短链服务标记,加上自定义UA后,双重异常特征被拦截;而默认UA可能被视为低风险请求通过。
    解决:更换代理IP测试,或给不同代理搭配不同主流UA循环使用。同时,部分代理不支持HEAD请求,可改用GET并开启stream=True:

    def unshorten_url(url):
        try:
            r = session.get(url, allow_redirects=True, timeout=10, stream=True)
            return r.url
        except Exception as e:
            return 'Error'
    
  • Cookie缺失导致跳转失败
    不带UA时,服务可能返回了必要Cookie,自定义UA后初始请求未获取Cookie,无法触发跳转。
    解决:先发送无跳转请求获取Cookie,再发起跳转请求:

    def unshorten_url(url):
        try:
            # 先获取Cookie,禁止跳转
            session.get(url, allow_redirects=False, timeout=10)
            # 再发起带跳转的请求
            r = session.head(url, allow_redirects=True, timeout=10)
            return r.url
        except Exception as e:
            return 'Error'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:25:15