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

如何使用Python requests库测量重定向阶段的延迟?

测量HTTP重定向阶段的延迟时间

重定向延迟指的是从301重定向响应到200最终响应的耗时,或是两次301重定向之间的耗时,效果类似Chrome扩展中的测量:

Chrome扩展重定向延迟测量界面

用Python的requests库时,r.elapsed只能统计从发送请求到接收首个响应内容的总耗时,没法单独获取每个重定向阶段的延迟时间。比如你给出的这段代码:

import requests
url = 'http://httpbin.org/redirect/3'
r = requests.head(url, allow_redirects=True, stream=True)
r.elapsed

只能拿到整个请求链的总耗时,看不到中间每一步跳转的延迟。

解决方法:手动处理重定向,逐阶段记录时间

要获取每个重定向阶段的延迟,需要禁用requests的自动重定向功能,手动追踪每个跳转步骤,记录每个请求的开始和结束时间:

import requests
from datetime import datetime
from urllib.parse import urljoin

def measure_redirect_delays(url):
    session = requests.Session()
    current_url = url
    delays = []
    while True:
        # 记录当前请求的开始时间
        start_time = datetime.now()
        # 禁用自动重定向,获取当前请求的响应
        response = session.head(current_url, allow_redirects=False, stream=True)
        # 计算当前请求的耗时
        elapsed = datetime.now() - start_time
        delays.append({
            'url': current_url,
            'status_code': response.status_code,
            'delay': elapsed
        })
        # 检查是否还有重定向
        if 300 <= response.status_code < 400 and 'Location' in response.headers:
            current_url = response.headers['Location']
            # 处理相对路径的重定向地址
            if not current_url.startswith(('http://', 'https://')):
                current_url = urljoin(url, current_url)
        else:
            break
    return delays

# 测试示例
url = 'http://httpbin.org/redirect/3'
redirect_delays = measure_redirect_delays(url)
for item in redirect_delays:
    print(f"URL: {item['url']} | 状态码: {item['status_code']} | 耗时: {item['delay']}")

代码说明

  • 用allow_redirects=False禁止自动跳转,这样能拿到每个重定向响应的详细信息
  • 每次请求前记录start_time,响应返回后计算时间差,得到当前阶段的延迟
  • 检查响应状态码和Location头,手动跳转到下一个地址,直到拿到非重定向响应
  • 处理相对路径的重定向地址,避免出现无效URL

运行这段代码后,就能得到每个重定向步骤的单独耗时,和Chrome扩展的测量逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:30:47