Tools 2026-03-20

How to Test Proxy Speed — 5 Methods That Actually Work (2026)

Learn 5 reliable methods to test proxy speed including curl timing, Python scripts, online tools, and our proxy checker. Understand latency vs throughput.

How to Test Proxy Speed — 5 Methods That Actually Work (2026)

A proxy that takes 5 seconds to respond is worse than no proxy at all. Speed testing is essential before you commit proxies to any task — whether that's scraping, account management, or everyday browsing. In this guide, we'll cover five reliable methods to measure proxy performance, from quick command-line checks to automated Python scripts.

Understanding Proxy Speed Metrics

Before testing, you need to understand what "proxy speed" actually means. There are three key metrics:

Latency (Response Time)

The time it takes for a request to travel from your machine, through the proxy, to the destination, and back. Measured in milliseconds (ms).

Throughput (Bandwidth)

How much data the proxy can transfer per second. Measured in Mbps or MB/s. Important for downloading large files or streaming.

Connection Time

How long it takes to establish the initial connection to the proxy. A high connection time suggests an overloaded or distant proxy server.

Method 1: curl with Timing

The fastest way to test a proxy from the command line. curl has built-in timing variables that give you detailed performance data.

Basic Speed Test

curl -x http://proxy_ip:port -o /dev/null -s -w \
  "Connect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
  https://httpbin.org/ip

This outputs three timing values:

Testing SOCKS5 Proxies with curl

curl --socks5 proxy_ip:port -o /dev/null -s -w \
  "Connect: %{time_connect}s\nTotal: %{time_total}s\n" \
  https://httpbin.org/ip

Testing with Authentication

curl -x http://username:password@proxy_ip:port -o /dev/null -s -w \
  "Total: %{time_total}s\n" \
  https://httpbin.org/ip

Batch Testing Multiple Proxies

while IFS= read -r proxy; do
  time=$(curl -x "$proxy" -o /dev/null -s -w "%{time_total}" \
    --connect-timeout 5 --max-time 10 \
    https://httpbin.org/ip 2>/dev/null)
  echo "$proxy - ${time}s"
done < proxy_list.txt

Method 2: Python Speed Testing Script

For more control and detailed metrics, use Python. This script tests multiple proxies concurrently and ranks them by speed.

import requests
import time
from concurrent.futures import ThreadPoolExecutor, as_completed

def test_proxy_speed(proxy_url, test_url="https://httpbin.org/ip", timeout=10):
    """Test a single proxy and return timing metrics."""
    proxies = {"http": proxy_url, "https": proxy_url}

    try:
        start = time.time()
        response = requests.get(test_url, proxies=proxies, timeout=timeout)
        total_time = time.time() - start

        if response.status_code == 200:
            return {
                "proxy": proxy_url,
                "status": "OK",
                "speed_ms": round(total_time * 1000, 2),
                "response_size": len(response.content),
            }
    except requests.exceptions.Timeout:
        return {"proxy": proxy_url, "status": "TIMEOUT", "speed_ms": None}
    except requests.exceptions.ProxyError:
        return {"proxy": proxy_url, "status": "PROXY_ERROR", "speed_ms": None}
    except Exception as e:
        return {"proxy": proxy_url, "status": f"ERROR: {str(e)}", "speed_ms": None}

def test_all_proxies(proxy_list, max_workers=20):
    """Test all proxies concurrently."""
    results = []

    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        futures = {
            executor.submit(test_proxy_speed, proxy): proxy
            for proxy in proxy_list
        }

        for future in as_completed(futures):
            result = future.result()
            results.append(result)
            status = result["status"]
            speed = result.get("speed_ms", "N/A")
            print(f"  {result['proxy']} — {status} ({speed}ms)")

    # Sort by speed (working proxies first)
    working = [r for r in results if r["speed_ms"] is not None]
    working.sort(key=lambda x: x["speed_ms"])

    return working

# Example usage
proxies = [
    "http://proxy1:8080",
    "http://proxy2:8080",
    "socks5://proxy3:1080",
]

print("Testing proxies...\n")
ranked = test_all_proxies(proxies)
print(f"\nWorking proxies: {len(ranked)}/{len(proxies)}")
print("\nTop 5 fastest:")
for r in ranked[:5]:
    print(f"  {r['proxy']} — {r['speed_ms']}ms")

Method 3: Our Proxy Checker Tool

The easiest method — no code required. Our Proxy Checker tool lets you paste a list of proxies and instantly see:

Simply visit the tool, paste your proxies (one per line), and click Check. Results appear within seconds.

This is the fastest way to validate proxies you've obtained from any source before using them in your projects.

Method 4: Continuous Monitoring Script

For proxies you use regularly, set up continuous monitoring to catch degradation early.

import requests
import time
import json
from datetime import datetime

def monitor_proxy(proxy_url, interval=300, log_file="proxy_log.json"):
    """Monitor a proxy's speed over time."""
    log = []

    while True:
        try:
            start = time.time()
            response = requests.get(
                "https://httpbin.org/ip",
                proxies={"http": proxy_url, "https": proxy_url},
                timeout=15
            )
            speed = round((time.time() - start) * 1000, 2)

            entry = {
                "timestamp": datetime.now().isoformat(),
                "speed_ms": speed,
                "status": response.status_code
            }
        except Exception as e:
            entry = {
                "timestamp": datetime.now().isoformat(),
                "speed_ms": None,
                "status": str(e)
            }

        log.append(entry)
        print(f"[{entry['timestamp']}] {proxy_url} — {entry['speed_ms']}ms")

        # Save log periodically
        with open(log_file, 'w') as f:
            json.dump(log, f, indent=2)

        time.sleep(interval)

Method 5: Throughput Testing

Speed isn't just about latency. If you're downloading large files or scraping heavy pages, throughput matters too.

import requests
import time

def test_throughput(proxy_url, test_url="https://speed.hetzner.de/1MB.bin"):
    """Test proxy download throughput."""
    proxies = {"http": proxy_url, "https": proxy_url}

    try:
        start = time.time()
        response = requests.get(test_url, proxies=proxies, timeout=30)
        elapsed = time.time() - start

        size_mb = len(response.content) / (1024 * 1024)
        speed_mbps = (size_mb * 8) / elapsed

        print(f"Downloaded {size_mb:.2f} MB in {elapsed:.2f}s")
        print(f"Throughput: {speed_mbps:.2f} Mbps")

        return speed_mbps
    except Exception as e:
        print(f"Throughput test failed: {e}")
        return 0

Interpreting Your Results

What Good Numbers Look Like

Use Case Target Latency Min Throughput
Web scraping Under 500ms 1 Mbps
Sneaker bots Under 200ms 5 Mbps
Social media mgmt Under 1000ms 0.5 Mbps
Video streaming Under 300ms 10 Mbps
General browsing Under 500ms 2 Mbps

Red Flags

Tips for Getting the Best Proxy Speeds

  1. Choose geographically close proxies — A proxy in your target site's country will always be faster
  2. Test at different times of day — Proxy speeds vary with usage patterns
  3. Avoid overloaded proxies — If a free proxy is too fast, everyone else found it too
  4. Use our API for fresh proxies — Access validated, speed-tested proxies programmatically via our API
  5. Rotate out slow proxies — Continuously monitor and replace underperformers

Automating Speed Tests with Our API

You can integrate proxy speed testing directly into your workflow using our API:

import requests

# Fetch fresh proxies from IPProxy.site API
api_response = requests.get("https://ipproxy.site/api/proxies?protocol=socks5&limit=20")
proxies = api_response.json()

# Test each proxy
for proxy in proxies:
    result = test_proxy_speed(f"socks5://{proxy['ip']}:{proxy['port']}")
    if result["speed_ms"] and result["speed_ms"] < 500:
        print(f"Fast proxy found: {proxy['ip']}:{proxy['port']} ({result['speed_ms']}ms)")

For a detailed guide on using proxies in Python, check out our tutorial on using proxies with Python requests.

Conclusion

Testing proxy speed isn't optional — it's a fundamental step in any proxy workflow. Use curl for quick one-off checks, Python scripts for batch testing, our Proxy Checker for a no-code solution, and continuous monitoring for long-term proxy management. The best proxy is a fast, reliable proxy, and now you have the tools to find it.

Get a Fresh, Tested Proxy Right Now

Every proxy is validated every 30 minutes. 2118 working proxies available right now.

← Back to all guides