小能豆

Python 请求查找代理延迟

py

我正在尝试通过使用带登录名的代理 ping 站点来测试代理的延迟。我知道请求很容易支持代理,并且想知道是否有办法通过这种方式 ping/测试站点的延迟。我也愿意接受其他方法,只要它们支持带登录名的代理。这是我的代理与请求集成的示例

import requests

proxy = {'https' : 'https://USER:PASS@IP:PORT'}

requests.get('https://www.google.com/', proxy=proxy)

我如何编写一个程序来测试代理登录网站的延迟?


阅读 18

收藏
2025-01-05

共1个答案

小能豆

你可以通过发送一个请求并测量请求和响应之间的时间差来测试代理的延迟。以下是一个使用 requests 库实现的方法:

示例代码

import requests
import time

def test_proxy_latency(proxy_url, test_url='https://www.google.com/'):
    # 设置代理
    proxies = {'https': proxy_url}

    try:
        # 记录请求开始时间
        start_time = time.time()

        # 发送请求
        response = requests.get(test_url, proxies=proxies, timeout=10)

        # 记录响应时间
        latency = time.time() - start_time

        # 检查响应状态码
        if response.status_code == 200:
            print(f"代理 {proxy_url} 的延迟是 {latency:.2f} 秒")
        else:
            print(f"代理 {proxy_url} 无法正常工作 (状态码: {response.status_code})")

        return latency
    except requests.exceptions.RequestException as e:
        print(f"代理 {proxy_url} 测试失败: {e}")
        return None

# 示例使用
proxy = 'https://USER:PASS@IP:PORT'
test_proxy_latency(proxy)

代码说明

  1. 设置代理:
  2. 将代理以 https://USER:PASS@IP:PORT 的形式传入,并设置到 requests.get()proxies 参数中。

  3. 测量时间:

  4. 使用 time.time() 记录请求发送和响应的时间差,计算出代理的延迟。

  5. 捕获异常:

  6. 使用 try-except 捕获可能的异常,例如超时或网络错误。

  7. 测试结果:

  8. 如果响应状态码是 200,表示代理正常,并输出延迟。
  9. 如果状态码异常或请求失败,输出相应的错误信息。

扩展建议

  • 并发测试:
    如果需要测试多个代理,可以使用 concurrent.futures.ThreadPoolExecutorasyncio 实现并发测试。

  • 输出结果到文件:
    将测试结果存储到 CSV 文件或数据库中,便于分析。

  • 支持 HTTP 和 HTTPS:
    根据目标站点是否使用 HTTPS,动态设置代理协议(httphttps)。

如果需要扩展功能或优化测试流程,请随时告知!

2025-01-05