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

如何让requests的get方法跟随所有重定向?disq.us短链接解析失败求助

解决disq.us短链接无法用requests解析的问题

嘿,我之前也碰到过一模一样的问题!disq.us这类短链接服务的跳转逻辑和bit.ly不一样,requests默认配置搞不定它,主要是这两个原因:

  • User-Agent检测:disq.us会验证请求的UA标识,requests默认的python-requests/x.y.z很容易被识别为非浏览器请求,直接返回原链接不触发重定向。
  • JavaScript动态跳转:有些disq.us链接不是靠HTTP 3xx状态码跳转,而是页面加载后用JS脚本完成跳转——requests本身不执行JavaScript,自然抓不到最终地址。

下面给你两个可行的解决方案:

方案1:模拟浏览器UA发送请求

先试试最简单的,给请求加个浏览器的UA头,大部分情况下就能解决问题:

import requests

def get_final_short_url(short_url):
    # 模拟Chrome浏览器的UA
    headers = {
        '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'
    }
    # 允许自动跟随重定向
    response = requests.get(short_url, headers=headers, allow_redirects=True, timeout=10)
    return response.url

# 测试disq.us链接(替换成你的目标短链接)
print(get_final_short_url('https://disq.us/xxxxxx'))

方案2:用支持JS渲染的工具模拟真实浏览器

如果加UA还不行,那肯定是需要执行JS才能跳转了。这时候可以用Playwright这类自动化工具,完全模拟浏览器行为:

from playwright.sync_api import sync_playwright

def get_final_url_with_js(short_url):
    with sync_playwright() as p:
        # 启动无头模式的Chrome(不显示浏览器窗口)
        browser = p.chromium.launch(headless=True)
        page = browser.new_page(
            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'
        )
        # 等待网络空闲,确保跳转完全完成
        page.goto(short_url, wait_until='networkidle')
        final_url = page.url
        browser.close()
        return final_url

# 测试
print(get_final_url_with_js('https://disq.us/xxxxxx'))

⚠️ 注意:使用Playwright需要先安装依赖:

pip install playwright
playwright install

批量处理小提示

  • 可以把两个方案结合:先用方案1尝试解析,若返回的URL和原短链接一致,再用方案2处理,既能保证效率又能覆盖所有情况。
  • 批量请求时记得控制频率,比如加个time.sleep(1),避免被disq.us封禁IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:54:40