How to Test Proxies: Your Complete Verification Guide 2025

Before deploying proxies for scraping, account management, or security, testing is absolutely critical. Whether you’ve purchased premium proxies or found a free list online, knowing what you’re working with can save hours of frustration and wasted resources.

This comprehensive guide covers 7 proven testing methods - from quick online checkers to advanced custom solutions - ensuring you can verify proxy speed, anonymity, location accuracy, and target website compatibility.

πŸ—‚οΈ Quick Navigation

Testing Methods:

Essential Info:


🎯 Why Test Proxies Before Using Them?

The Risks of Untested Proxies

Risk Impact Prevention
Dead Proxies Wasted time on non-working IPs ⏱️ Pre-test availability
Slow Connections Project delays, timeouts πŸš€ Speed benchmarking
Wrong Location Geo-targeting failures 🌍 Location verification
Poor Anonymity IP leaks, detection πŸ”’ Anonymity testing
Target Blocks Can’t access needed sites 🎯 Target compatibility
Money Wasted Paying for unusable proxies πŸ’° Test during trial/guarantee

πŸ’‘ Pro Tip: Most premium proxy providers offer 24-48 hour money-back guarantees. Always test immediately upon purchase!


πŸ“Š What Should You Test For?

Essential Proxy Metrics

βœ… 1. Availability (Is it Working?)

What to Check:

  • Proxy responds to requests
  • No connection timeouts
  • Consistent uptime

Red Flags:

  • ❌ Connection refused errors
  • ❌ Timeout after 10+ seconds
  • ❌ Intermittent connectivity

⚑ 2. Speed & Latency

What to Check:

  • Response time (< 3 seconds ideal)
  • Download speed (Mbps)
  • Latency/ping (< 500ms good)

Performance Standards:

Proxy Type Expected Speed Acceptable Latency
Datacenter 100-1000 Mbps 10-100ms
Residential 10-50 Mbps 200-500ms
Mobile 20-100 Mbps 300-800ms

🌍 3. Geographic Location

What to Check:

  • Actual country matches advertised
  • City-level accuracy (if needed)
  • ISP matches expected region

Why It Matters:

  • Geo-targeted content access
  • Localized scraping
  • Regional compliance
  • Search engine localization

🎭 4. Anonymity Level

What to Check:

  • Real IP hidden
  • Proxy headers revealed?
  • DNS leaks
  • WebRTC leaks

Anonymity Levels:

Level Your IP Hidden? Proxy Detected? Rating
Transparent ❌ No βœ… Yes ⭐ Poor
Anonymous βœ… Yes βœ… Yes ⭐⭐⭐ Good
Elite βœ… Yes ❌ No ⭐⭐⭐⭐⭐ Excellent

🏒 5. Proxy Type (Datacenter vs Residential)

What to Check:

  • ISP vs datacenter hosting
  • IP reputation databases
  • ASN (Autonomous System Number)

Detection Methods:

  • IP intelligence databases
  • Known datacenter IP ranges
  • ISP registration records

🎯 6. Target Website Compatibility

What to Check:

  • Can access your specific targets
  • No CAPTCHA challenges (or rare)
  • Not blocked/banned
  • Correct content returned

Critical for:

  • Social media automation
  • E-commerce scraping
  • Restricted platforms
  • Geo-blocked services

πŸ” Method 1: Online IP Checkers (Instant Verification)

Best For: Quick verification, beginners, one-off checks Time Required: 30 seconds Skill Level: ⭐ Beginner

Top Online IP Checkers

πŸ₯‡ IPinfo.io

URL: https://ipinfo.io

What It Shows:

  • βœ… Current IP address
  • βœ… Geographic location (city, region, country)
  • βœ… ISP/Organization
  • βœ… ASN (Autonomous System Number)
  • βœ… Basic proxy detection

How to Use:

Method A: Browser Testing

  1. Set up proxy in your browser
  2. Visit https://ipinfo.io
  3. Compare displayed IP with your real IP
  4. Verify location matches proxy location

Method B: cURL Command

# Test proxy via command line
curl --proxy http://proxy.example.com:8080 https://ipinfo.io

# With authentication
curl --proxy http://username:[email protected]:8080 https://ipinfo.io

# Pretty JSON output
curl --proxy http://proxy.example.com:8080 https://ipinfo.io/json | python -m json.tool

Sample Output:

{
  "ip": "203.0.113.45",
  "city": "Los Angeles",
  "region": "California",
  "country": "US",
  "org": "AS7922 Comcast Cable Communications",
  "timezone": "America/Los_Angeles"
}

πŸ₯ˆ WhatIsMyIP.com

URL: https://www.whatismyip.com

What It Shows:

  • βœ… IP address
  • βœ… Location (country, city)
  • βœ… ISP
  • βœ… Browser information
  • βœ… User agent
  • ⚠️ Proxy detection (basic)

Unique Feature: Shows browser fingerprint details


πŸ₯‰ IPLeak.net

URL: https://ipleak.net

What It Shows:

  • βœ… IP address (IPv4 and IPv6)
  • βœ… DNS servers
  • βœ… WebRTC detection
  • βœ… Geolocation
  • βœ… Torrent IP detection

Why It’s Special: Best for leak detection - shows if your real IP leaks through WebRTC or DNS.


🌟 Whoer.net

URL: https://whoer.net

What It Shows:

  • βœ… IP address
  • βœ… Anonymity score (out of 100)
  • βœ… Blacklist status
  • βœ… DNS leaks
  • βœ… WebRTC leaks
  • βœ… Browser fingerprint

Unique Feature: Anonymity score - rates your overall privacy level.


Comparison Table

Tool Speed Detail Level Leak Detection Proxy Type Best For
IPinfo.io ⚑⚑⚑ ⭐⭐⭐ ❌ βœ… Quick API checks
WhatIsMyIP ⚑⚑ ⭐⭐ ❌ ⚠️ Basic verification
IPLeak.net ⚑⚑ ⭐⭐⭐⭐ βœ…βœ… ⚠️ Leak testing
Whoer.net ⚑ ⭐⭐⭐⭐⭐ βœ…βœ… βœ… Complete analysis

Python Script for Batch Testing

import requests

def test_proxy_with_ipinfo(proxy):
    """Test single proxy with IPinfo.io"""
    proxies = {
        'http': proxy,
        'https': proxy
    }
    
    try:
        response = requests.get(
            'https://ipinfo.io/json',
            proxies=proxies,
            timeout=10
        )
        
        if response.status_code == 200:
            data = response.json()
            return {
                'proxy': proxy,
                'status': 'working',
                'ip': data.get('ip'),
                'city': data.get('city'),
                'country': data.get('country'),
                'org': data.get('org')
            }
    except Exception as e:
        return {
            'proxy': proxy,
            'status': 'failed',
            'error': str(e)
        }

# Test multiple proxies
proxy_list = [
    'http://proxy1.example.com:8080',
    'http://proxy2.example.com:8080',
    'http://proxy3.example.com:8080'
]

for proxy in proxy_list:
    result = test_proxy_with_ipinfo(proxy)
    print(f"{result['proxy']}: {result['status']}")
    if result['status'] == 'working':
        print(f"  IP: {result['ip']}, Location: {result['city']}, {result['country']}")

πŸ› οΈ Method 2: Dedicated Proxy Checker Tools

Best For: Testing multiple proxies, comprehensive overview Time Required: 1-5 minutes Skill Level: ⭐⭐ Beginner-Intermediate

Free Online Proxy Checkers

πŸ” ProxyScrape Proxy Checker

URL: https://proxyscrape.com/proxy-checker

Features:

  • βœ… Batch testing (up to 100 proxies)
  • βœ… Connection speed test
  • βœ… Anonymity level detection
  • βœ… Location identification
  • βœ… Export working proxies

How to Use:

  1. Visit the proxy checker page
  2. Paste your proxy list (one per line):
192.168.1.1:8080
proxy.example.com:3128
username:[email protected]:8080
  1. Select protocol (HTTP, HTTPS, SOCKS4, SOCKS5)
  2. Set timeout (5-30 seconds)
  3. Click “Check Proxies”
  4. Export working proxies

Output Format:

βœ… 192.168.1.1:8080 - Working - 250ms - USA - Elite
❌ proxy.example.com:3128 - Failed - Timeout
βœ… proxy2.com:8080 - Working - 850ms - Germany - Anonymous

🌐 Hide.me Proxy Checker

URL: https://hide.me/en/proxy-checker

Features:

  • βœ… Single proxy testing
  • βœ… Anonymity verification
  • βœ… Speed test
  • βœ… Location check
  • βœ… Simple interface

Best For: Quick single-proxy verification without bulk needs.


⚑ FreeProxyList Checker

URL: https://free-proxy-list.net/proxy-checker.html

Features:

  • βœ… Bulk proxy testing
  • βœ… Protocol support (HTTP, SOCKS)
  • βœ… Response time measurement
  • βœ… Free to use

Comparison: Online Proxy Checkers

Feature ProxyScrape Hide.me FreeProxyList
Batch Testing βœ… 100 proxies ❌ Single only βœ… 50 proxies
Speed Test βœ… Yes βœ… Yes βœ… Yes
Anonymity Check βœ… Yes βœ… Yes ⚠️ Basic
Export Results βœ… Yes ❌ No βœ… Yes
Auth Support βœ… Yes ⚠️ Limited ❌ No
API Available βœ… Paid ❌ No ❌ No

πŸ“š Method 3: IP Intelligence Databases

Best For: Deep analysis, proxy type identification, professional use Time Required: 1 minute per IP Skill Level: ⭐⭐⭐ Intermediate

Top IP Intelligence Services

πŸ₯‡ IP2Location

URL: https://www.ip2location.com

Free Tier: 50-200 lookups/day (with registration)

What It Reveals:

Data Point Description
IP Address IPv4/IPv6
Country/City Accurate geolocation
ISP Internet Service Provider
Domain Associated domain name
Proxy Type DCH, RES, MOB, PUB, VPN, TOR
Usage Type Commercial, hosting, residential
Threat Level Risk score (malicious activity)
ASN Autonomous System Number

Proxy Type Codes:

  • DCH: Datacenter/Hosting
  • RES: Residential
  • MOB: Mobile
  • PUB: Public proxy
  • VPN: VPN server
  • TOR: Tor exit node

πŸ₯ˆ IPQualityScore (IPQS)

URL: https://www.ipqualityscore.com/free-ip-lookup-proxy-vpn-test

Free Tier: 5,000 lookups/month

What It Reveals:

  • βœ… Fraud score (0-100)
  • βœ… Proxy/VPN detection
  • βœ… Tor exit node detection
  • βœ… Recent abuse reports
  • βœ… Bot likelihood
  • βœ… Connection type

Fraud Score Interpretation:

  • 0-25: Low risk (clean IP)
  • 25-75: Medium risk (suspicious)
  • 75-100: High risk (likely malicious)

πŸ₯‰ IPHub

URL: https://iphub.info

Free Tier: 1,000 lookups/day

What It Reveals:

  • βœ… Proxy detection (0-2 score)
  • βœ… Country code
  • βœ… ISP

Block Score:

  • 0: Residential/unclassified (good)
  • 1: Non-residential (datacenter)
  • 2: Known proxy/VPN/bad IP

Unique Feature: Simple binary classification - good for quick block/allow decisions.


Using IP Databases Programmatically

Python Example: IP2Location API

import requests

def check_ip_with_ip2location(ip_address, api_key):
    """Check IP details with IP2Location API"""
    url = f"https://api.ip2location.com/v2/?ip={ip_address}&key={api_key}&package=WS24"
    
    try:
        response = requests.get(url, timeout=10)
        data = response.json()
        
        return {
            'ip': ip_address,
            'country': data.get('country_name'),
            'city': data.get('city_name'),
            'isp': data.get('isp'),
            'proxy_type': data.get('proxy_type'),
            'is_proxy': data.get('is_proxy') == 'YES',
            'usage_type': data.get('usage_type')
        }
    except Exception as e:
        return {'ip': ip_address, 'error': str(e)}

# Usage
api_key = "YOUR_API_KEY"
result = check_ip_with_ip2location("8.8.8.8", api_key)
print(result)

Python Example: IPQualityScore API

import requests

def check_ip_with_ipqs(ip_address, api_key):
    """Check IP reputation with IPQualityScore"""
    url = f"https://ipqualityscore.com/api/json/ip/{api_key}/{ip_address}"
    
    params = {
        'strictness': 1,  # 0-2, higher = more strict
        'allow_public_access_points': 'true',
        'lighter_penalties': 'false'
    }
    
    try:
        response = requests.get(url, params=params, timeout=10)
        data = response.json()
        
        return {
            'ip': ip_address,
            'fraud_score': data.get('fraud_score'),
            'is_proxy': data.get('proxy'),
            'is_vpn': data.get('vpn'),
            'is_tor': data.get('tor'),
            'is_bot': data.get('bot_status'),
            'recent_abuse': data.get('recent_abuse'),
            'country': data.get('country_code'),
            'isp': data.get('ISP'),
            'connection_type': data.get('connection_type')
        }
    except Exception as e:
        return {'ip': ip_address, 'error': str(e)}

# Usage
api_key = "YOUR_API_KEY"
result = check_ip_with_ipqs("8.8.8.8", api_key)

if result['fraud_score'] < 25:
    print(f"βœ… Clean IP: {result['ip']}")
elif result['fraud_score'] < 75:
    print(f"⚠️ Suspicious IP: {result['ip']}")
else:
    print(f"❌ High-risk IP: {result['ip']}")

πŸ’» Method 4: Local Proxy Testing Applications

Best For: Target-specific testing, real-world performance, bulk validation Time Required: 2-10 minutes (depending on list size) Skill Level: ⭐⭐ Intermediate

Desktop Proxy Checkers

πŸͺŸ Proxy Checker by SmartProxy (Windows/Mac)

Download: https://smartproxy.com/proxy-checker

Features:

  • βœ… Bulk proxy testing (unlimited)
  • βœ… Target website testing
  • βœ… Speed measurement
  • βœ… Export results (CSV, TXT)
  • βœ… Protocol support (HTTP, HTTPS, SOCKS5)
  • βœ… Clean interface

How to Use:

Step 1: Install Application

  • Download for Windows or macOS
  • Install and launch

Step 2: Import Proxies

File β†’ Import Proxies

Paste list in format:

192.168.1.1:8080:username:password
proxy.example.com:3128
socks5://proxy3.com:1080:user:pass

Step 3: Configure Test

  • Target URL: https://www.google.com (or your specific target)
  • Timeout: 10 seconds
  • Threads: 10 (concurrent tests)

Step 4: Run Test Click “Test Proxies”

Step 5: Export Results

Export β†’ Working Proxies β†’ Save as CSV

Output Example:

Proxy,Status,Speed,Location,Type
192.168.1.1:8080,Working,250ms,USA,Elite
proxy.example.com:3128,Failed,Timeout,-,-
proxy3.com:1080,Working,850ms,Germany,Anonymous

πŸ”§ GSA Proxy Scraper (Windows)

Download: https://gsa-online.de/download/gsa-proxy-scraper/

Features:

  • βœ… Built-in proxy scraping
  • βœ… Testing & filtering
  • βœ… Scheduled testing
  • βœ… Export multiple formats
  • βœ… Advanced filtering rules

Best For: Users who need both scraping and testing in one tool.


🐧 ProxyChains (Linux/Mac)

Installation:

# Ubuntu/Debian
sudo apt-get install proxychains4

# macOS
brew install proxychains-ng

Configuration: Edit /etc/proxychains.conf:

strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000

[ProxyList]
http 192.168.1.1 8080 username password
socks5 proxy.example.com 1080

Usage:

# Test proxy with curl
proxychains4 curl https://ipinfo.io

# Test with custom command
proxychains4 wget https://example.com

Custom Python Proxy Tester Script

For developers who want full control:

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

def test_single_proxy(proxy, target_url, timeout=10):
    """
    Test single proxy against target URL
    Returns: dict with test results
    """
    proxies = {
        'http': proxy,
        'https': proxy
    }
    
    start_time = time.time()
    
    try:
        response = requests.get(
            target_url,
            proxies=proxies,
            timeout=timeout,
            allow_redirects=True
        )
        
        elapsed = (time.time() - start_time) * 1000  # Convert to ms
        
        return {
            'proxy': proxy,
            'status': 'working',
            'speed_ms': round(elapsed, 2),
            'status_code': response.status_code,
            'response_size': len(response.content)
        }
        
    except requests.exceptions.Timeout:
        return {
            'proxy': proxy,
            'status': 'timeout',
            'error': 'Connection timeout'
        }
    except requests.exceptions.ProxyError:
        return {
            'proxy': proxy,
            'status': 'proxy_error',
            'error': 'Proxy connection failed'
        }
    except Exception as e:
        return {
            'proxy': proxy,
            'status': 'failed',
            'error': str(e)
        }

def test_proxy_list(proxy_list, target_url='https://httpbin.org/ip', max_workers=10):
    """
    Test multiple proxies concurrently
    """
    results = []
    
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        # Submit all tests
        future_to_proxy = {
            executor.submit(test_single_proxy, proxy, target_url): proxy
            for proxy in proxy_list
        }
        
        # Collect results as they complete
        for future in as_completed(future_to_proxy):
            results.append(future.result())
    
    return results

# Usage Example
if __name__ == '__main__':
    # Your proxy list
    proxies = [
        'http://proxy1.example.com:8080',
        'http://user:[email protected]:8080',
        'socks5://proxy3.example.com:1080'
    ]
    
    # Test against target
    target = 'https://www.google.com'
    results = test_proxy_list(proxies, target_url=target, max_workers=5)
    
    # Display results
    print(f"\nTesting {len(proxies)} proxies against {target}\n")
    print(f"{'Proxy':<40} {'Status':<15} {'Speed':<10}")
    print("-" * 70)
    
    working = 0
    for result in results:
        status = result['status']
        speed = f"{result.get('speed_ms', 0)}ms" if status == 'working' else 'N/A'
        print(f"{result['proxy']:<40} {status:<15} {speed:<10}")
        
        if status == 'working':
            working += 1
    
    print(f"\nβœ… Working: {working}/{len(proxies)} ({working/len(proxies)*100:.1f}%)")

Save as: proxy_tester.py

Run:

python proxy_tester.py

🌐 Method 5: Manual Browser Testing

Best For: Hands-on verification, visual inspection, beginners Time Required: 2-5 minutes per proxy Skill Level: ⭐ Beginner

Step-by-Step Browser Testing

Chrome/Edge Testing

Step 1: Configure Proxy See our complete proxy setup guide

Quick Setup:

Settings β†’ System β†’ Open proxy settings β†’ Manual proxy
Enter: proxy.example.com:8080

Step 2: Visit Test Sites

Test 1: IP Verification

Visit: https://ipinfo.io
Check: IP matches proxy, not your real IP

Test 2: Location Verification

Visit: https://www.google.com
Check: Google shows correct region/language

Test 3: Anonymity Check

Visit: https://whoer.net
Check: Anonymity score, no leaks

Test 4: Target Website

Visit: Your actual target website
Check: Loads correctly, no blocks/CAPTCHAs

Firefox Testing

Advantage: Firefox has independent proxy settings (doesn’t use system proxy).

Setup:

Settings β†’ Network Settings β†’ Manual proxy configuration
HTTP Proxy: proxy.example.com  Port: 8080
β˜‘οΈ Also use this proxy for HTTPS

Same testing steps as Chrome above.


Visual Testing Checklist

βœ… Successful Proxy Test:

  • IP address changed from your real IP
  • Location matches proxy location
  • No DNS leaks detected
  • No WebRTC leaks detected
  • Target website loads normally
  • No excessive CAPTCHAs
  • Page loads in < 5 seconds
  • Content matches expected region

❌ Failed Proxy Test:

  • Real IP still visible
  • Location doesn’t match
  • DNS/WebRTC leaks present
  • Target website blocks access
  • Constant CAPTCHA challenges
  • Very slow loading (> 15 seconds)
  • Error messages or timeouts

⌨️ Method 6: Command Line Testing (cURL & Wget)

Best For: Developers, automation, scripting, quick checks Time Required: 10 seconds per test Skill Level: ⭐⭐⭐ Advanced

cURL Proxy Testing

Basic Connection Test

# Test if proxy works
curl --proxy http://proxy.example.com:8080 https://ipinfo.io

# With authentication
curl --proxy http://username:[email protected]:8080 https://ipinfo.io

# SOCKS5 proxy
curl --socks5 proxy.example.com:1080 https://ipinfo.io

Speed Test with Timing

# Measure total time
curl --proxy http://proxy.com:8080 \
     -w "Time: %{time_total}s\n" \
     -o /dev/null \
     -s \
     https://www.google.com

Output:

Time: 0.458s

Detailed Timing Breakdown

# Show all timing metrics
curl --proxy http://proxy.com:8080 \
     -w "\nDNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
     -o /dev/null \
     -s \
     https://example.com

Output:

DNS: 0.045s
Connect: 0.124s
TTFB: 0.385s
Total: 0.458s

Check Response Headers

# See all response headers
curl --proxy http://proxy.com:8080 \
     -I \
     https://example.com

Look for:

  • X-Forwarded-For: Should show proxy IP, not yours
  • Via: May reveal proxy presence (anonymous proxies)
  • X-Real-IP: Should be proxy IP

Test Multiple Proxies (Bash Script)

#!/bin/bash
# save as: test_proxies.sh

PROXY_LIST="proxies.txt"  # One proxy per line
TARGET_URL="https://ipinfo.io"

echo "Testing proxies from $PROXY_LIST"
echo "=================================="

while IFS= read -r proxy; do
    echo -n "Testing $proxy ... "
    
    response=$(curl --proxy "$proxy" \
                    --connect-timeout 10 \
                    --max-time 15 \
                    -s \
                    "$TARGET_URL")
    
    if [ $? -eq 0 ]; then
        ip=$(echo "$response" | grep -oP '"ip":\s*"\K[^"]+')
        country=$(echo "$response" | grep -oP '"country":\s*"\K[^"]+')
        echo "βœ… Working - IP: $ip, Country: $country"
    else
        echo "❌ Failed"
    fi
done < "$PROXY_LIST"

Usage:

chmod +x test_proxies.sh
./test_proxies.sh

Wget Proxy Testing

# Basic test
wget -e use_proxy=yes \
     -e http_proxy=proxy.example.com:8080 \
     -O - \
     https://ipinfo.io

# With authentication
wget -e use_proxy=yes \
     -e http_proxy=username:[email protected]:8080 \
     -O - \
     https://ipinfo.io

# Speed test (download file)
wget -e use_proxy=yes \
     -e http_proxy=proxy.example.com:8080 \
     --output-document=/dev/null \
     https://speed.hetzner.de/100MB.bin

πŸ—οΈ Method 7: Build Your Own Proxy Tester

Best For: Professional use, custom requirements, ongoing testing Time Required: 1-4 hours setup, then automated Skill Level: ⭐⭐⭐⭐⭐ Expert

Advanced Python Proxy Testing Framework

#!/usr/bin/env python3
"""
Advanced Proxy Testing Framework
Features: Speed, anonymity, location, target testing
"""

import requests
import time
import json
from concurrent.futures import ThreadPoolExecutor, as_completed
from typing import List, Dict
import statistics

class ProxyTester:
    def __init__(self, timeout=10, max_workers=10):
        self.timeout = timeout
        self.max_workers = max_workers
        self.results = []
    
    def test_availability(self, proxy: str) -> Dict:
        """Test if proxy is responsive"""
        proxies = {'http': proxy, 'https': proxy}
        
        try:
            response = requests.get(
                'https://httpbin.org/ip',
                proxies=proxies,
                timeout=self.timeout
            )
            return {
                'available': response.status_code == 200,
                'status_code': response.status_code
            }
        except:
            return {'available': False, 'status_code': None}
    
    def test_speed(self, proxy: str, iterations=3) -> Dict:
        """Test proxy speed with multiple iterations"""
        proxies = {'http': proxy, 'https': proxy}
        times = []
        
        for _ in range(iterations):
            start = time.time()
            try:
                requests.get(
                    'https://www.google.com',
                    proxies=proxies,
                    timeout=self.timeout
                )
                elapsed = (time.time() - start) * 1000
                times.append(elapsed)
            except:
                return {'speed_ms': None, 'speed_rating': 'failed'}
        
        avg_speed = statistics.mean(times)
        
        # Speed rating
        if avg_speed < 500:
            rating = 'excellent'
        elif avg_speed < 1000:
            rating = 'good'
        elif avg_speed < 2000:
            rating = 'acceptable'
        else:
            rating = 'slow'
        
        return {
            'speed_ms': round(avg_speed, 2),
            'speed_min': round(min(times), 2),
            'speed_max': round(max(times), 2),
            'speed_rating': rating
        }
    
    def test_location(self, proxy: str) -> Dict:
        """Get proxy geographic location"""
        proxies = {'http': proxy, 'https': proxy}
        
        try:
            response = requests.get(
                'https://ipinfo.io/json',
                proxies=proxies,
                timeout=self.timeout
            )
            data = response.json()
            
            return {
                'ip': data.get('ip'),
                'city': data.get('city'),
                'region': data.get('region'),
                'country': data.get('country'),
                'org': data.get('org')
            }
        except:
            return {
                'ip': None,
                'city': None,
                'region': None,
                'country': None,
                'org': None
            }
    
    def test_anonymity(self, proxy: str) -> Dict:
        """Test proxy anonymity level"""
        proxies = {'http': proxy, 'https': proxy}
        
        try:
            # Check headers that proxy sends
            response = requests.get(
                'https://httpbin.org/headers',
                proxies=proxies,
                timeout=self.timeout
            )
            headers = response.json()['headers']
            
            # Check for revealing headers
            has_xff = 'X-Forwarded-For' in headers
            has_via = 'Via' in headers
            
            if not has_xff and not has_via:
                level = 'elite'
            elif has_via or has_xff:
                level = 'anonymous'
            else:
                level = 'transparent'
            
            return {
                'anonymity_level': level,
                'reveals_proxy': has_via,
                'reveals_ip': has_xff
            }
        except:
            return {
                'anonymity_level': 'unknown',
                'reveals_proxy': None,
                'reveals_ip': None
            }
    
    def test_target_compatibility(self, proxy: str, target_url: str) -> Dict:
        """Test if proxy works with specific target"""
        proxies = {'http': proxy, 'https': proxy}
        
        try:
            response = requests.get(
                target_url,
                proxies=proxies,
                timeout=self.timeout
            )
            
            # Check for blocks/CAPTCHAs
            content = response.text.lower()
            blocked = any(keyword in content for keyword in [
                'captcha', 'blocked', 'access denied', 'forbidden'
            ])
            
            return {
                'compatible': response.status_code == 200 and not blocked,
                'status_code': response.status_code,
                'blocked': blocked
            }
        except:
            return {
                'compatible': False,
                'status_code': None,
                'blocked': None
            }
    
    def test_comprehensive(self, proxy: str, target_url=None) -> Dict:
        """Run all tests on a proxy"""
        print(f"Testing {proxy}...")
        
        result = {'proxy': proxy}
        
        # Test 1: Availability
        avail = self.test_availability(proxy)
        result.update(avail)
        
        if not avail['available']:
            result['overall_status'] = 'failed'
            return result
        
        # Test 2: Speed
        speed = self.test_speed(proxy)
        result.update(speed)
        
        # Test 3: Location
        location = self.test_location(proxy)
        result.update(location)
        
        # Test 4: Anonymity
        anonymity = self.test_anonymity(proxy)
        result.update(anonymity)
        
        # Test 5: Target compatibility (optional)
        if target_url:
            compat = self.test_target_compatibility(proxy, target_url)
            result.update(compat)
        
        # Overall rating
        if speed['speed_ms'] and speed['speed_ms'] < 1000:
            result['overall_status'] = 'excellent'
        elif speed['speed_ms'] and speed['speed_ms'] < 2000:
            result['overall_status'] = 'good'
        else:
            result['overall_status'] = 'acceptable'
        
        return result
    
    def test_batch(self, proxy_list: List[str], target_url=None) -> List[Dict]:
        """Test multiple proxies concurrently"""
        results = []
        
        with ThreadPoolExecutor(max_workers=self.max_workers) as executor:
            futures = {
                executor.submit(self.test_comprehensive, proxy, target_url): proxy
                for proxy in proxy_list
            }
            
            for future in as_completed(futures):
                results.append(future.result())
        
        self.results = results
        return results
    
    def export_results(self, filename='proxy_test_results.json'):
        """Export test results to JSON"""
        with open(filename, 'w') as f:
            json.dump(self.results, f, indent=2)
        print(f"βœ… Results exported to {filename}")
    
    def print_summary(self):
        """Print human-readable summary"""
        if not self.results:
            print("No results to display")
            return
        
        print("\n" + "="*80)
        print("PROXY TESTING RESULTS")
        print("="*80)
        
        working = [r for r in self.results if r.get('available')]
        print(f"\nβœ… Working: {len(working)}/{len(self.results)}")
        
        if working:
            speeds = [r['speed_ms'] for r in working if r.get('speed_ms')]
            if speeds:
                print(f"⚑ Avg Speed: {statistics.mean(speeds):.2f}ms")
                print(f"⚑ Fastest: {min(speeds):.2f}ms")
                print(f"⚑ Slowest: {max(speeds):.2f}ms")
        
        print("\n" + "-"*80)
        print(f"{'Proxy':<40} {'Status':<10} {'Speed':<10} {'Location':<15} {'Anonymity':<10}")
        print("-"*80)
        
        for r in self.results:
            proxy = r['proxy'][:38]
            status = 'βœ…' if r.get('available') else '❌'
            speed = f"{r.get('speed_ms', 0):.0f}ms" if r.get('speed_ms') else 'N/A'
            location = f"{r.get('country', 'N/A')}"
            anon = r.get('anonymity_level', 'N/A')
            
            print(f"{proxy:<40} {status:<10} {speed:<10} {location:<15} {anon:<10}")

# Usage Example
if __name__ == '__main__':
    # Your proxy list
    proxies = [
        'http://proxy1.example.com:8080',
        'http://user:[email protected]:8080',
        'http://proxy3.example.com:8080'
    ]
    
    # Initialize tester
    tester = ProxyTester(timeout=15, max_workers=5)
    
    # Test all proxies
    print("Starting comprehensive proxy testing...\n")
    results = tester.test_batch(proxies, target_url='https://www.google.com')
    
    # Display results
    tester.print_summary()
    
    # Export to JSON
    tester.export_results('proxy_results.json')

Save as: advanced_proxy_tester.py

Run:

python advanced_proxy_tester.py

Features of This Framework

Feature Description Benefit
Concurrent Testing Tests multiple proxies simultaneously 10x faster than sequential
Speed Benchmarking Multiple iterations with statistics Accurate performance metrics
Anonymity Detection Checks proxy headers Know your privacy level
Location Verification Gets geo data from IPinfo Confirm proxy location
Target Testing Checks specific websites Real-world compatibility
JSON Export Structured data output Easy integration
Human Readable Pretty printed summary Quick overview

βœ… Proxy Testing Checklist

Before Testing

  • Understand your use case (scraping, accounts, privacy)
  • Know what proxy type you have (datacenter, residential, mobile)
  • Have proxy credentials ready (if required)
  • Know your target websites (if applicable)
  • Set realistic expectations for proxy type

During Testing

Basic Tests:

  • Test availability (is it online?)
  • Test speed (< 3 seconds ideal)
  • Verify IP changed from your real IP
  • Check geographic location
  • Confirm proxy type (datacenter vs residential)

Advanced Tests:

  • Check anonymity level (elite preferred)
  • Test DNS leaks (should use proxy DNS)
  • Test WebRTC leaks (should hide real IP)
  • Test target website compatibility
  • Check for CAPTCHA frequency
  • Measure success rate (aim for 90%+)

After Testing

Analysis:

  • Calculate working percentage (aim for 95%+)
  • Identify speed outliers (remove very slow)
  • Verify locations match your needs
  • Check anonymity meets requirements
  • Test target compatibility is acceptable

Action:

  • Remove non-working proxies from list
  • Document working proxies
  • Set up monitoring for production
  • Request refund if quality poor (within guarantee period)
  • Contact provider if issues found

🚨 Troubleshooting Failed Proxy Tests

Issue 1: All Proxies Fail Availability Test

Possible Causes:

1. Authentication Problem

# ❌ Wrong format
proxy = 'http://proxy.com:8080'  # Missing credentials

# βœ… Correct format
proxy = 'http://username:[email protected]:8080'

2. IP Not Whitelisted

# Check your current IP
curl https://ipinfo.io/ip

# Add to provider's whitelist

3. Wrong Port/Protocol

# Try different protocols
proxies = [
    'http://proxy.com:8080',   # HTTP
    'https://proxy.com:8080',  # HTTPS
    'socks5://proxy.com:1080'  # SOCKS5
]

Issue 2: Proxies Work But Very Slow

Solutions:

1. Geographic Distance

  • Use proxies closer to your location
  • Or closer to target website

2. Proxy Type Mismatch

  • Residential naturally slower than datacenter
  • Consider datacenter if speed critical

3. Overloaded Proxy

  • Test at different times
  • Try dedicated vs shared proxies

4. Target Website Slow

# Test proxy speed with fast endpoint
curl --proxy http://proxy.com:8080 \
     -w "Time: %{time_total}s\n" \
     -o /dev/null \
     -s \
     https://www.google.com

Issue 3: Anonymity Tests Show Leaks

DNS Leak:

# Use proxy's DNS
proxies = {
    'http': 'http://proxy.com:8080',
    'https': 'http://proxy.com:8080'
}

# Don't use system DNS

WebRTC Leak:

  • Disable WebRTC in browser
  • Chrome: chrome://flags/#enable-webrtc
  • Firefox: about:config β†’ media.peerconnection.enabled = false

Check for leaks:

  • Visit: https://ipleak.net
  • Ensure no real IP visible

Issue 4: Target Website Blocks Proxy

Solutions:

1. Upgrade Proxy Type

Datacenter β†’ Residential β†’ Mobile

2. Improve Request Headers

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1'
}

3. Add Delays

import time
time.sleep(random.uniform(2, 5))

4. Use Session Management

session = requests.Session()
session.proxies = proxies
session.headers = headers

# Maintain cookies and session
response1 = session.get(url1)
response2 = session.get(url2)  # Uses same session

πŸ’‘ Proxy Testing Best Practices

βœ… DO:

1. Test Immediately

  • Test proxies within money-back guarantee period
  • Most providers: 24-48 hours
  • Document results for potential refund

2. Test Your Actual Use Case

# Don't just test Google
target = 'https://your-actual-target.com'
test_proxy(proxy, target)

3. Test Multiple Times

# One test isn't enough
for i in range(5):
    result = test_proxy(proxy, target)
    # Check consistency

4. Test at Different Times

  • Morning, afternoon, evening
  • Weekday vs weekend
  • Peak vs off-peak hours

5. Keep Records

# Log all test results
results = {
    'date': '2025-11-04',
    'proxy': proxy,
    'tests': [test1, test2, test3],
    'avg_speed': avg_speed,
    'success_rate': success_rate
}

❌ DON’T:

1. Don’t Trust Free Proxies

  • 99% are malicious or unusable
  • Use only for learning/testing
  • Never for production or sensitive data

2. Don’t Test Just Once

  • Network conditions vary
  • One success doesn’t mean reliability
  • One failure doesn’t mean proxy is bad

3. Don’t Ignore Target Compatibility

# ❌ Wrong
test_proxy_with_google(proxy)  # Google works
use_for_instagram(proxy)  # Instagram blocks

# βœ… Correct
test_proxy_with_instagram(proxy)  # Test actual target

4. Don’t Forget Rate Limits

# ❌ Don't hammer servers
for proxy in 1000_proxies:
    test_immediately(proxy)

# βœ… Add delays
for proxy in 1000_proxies:
    test(proxy)
    time.sleep(1)  # Be respectful

5. Don’t Mix Proxy Types

  • Datacenter β‰  Residential performance
  • Compare apples to apples
  • Test same type together

πŸ“š Frequently Asked Questions

How many proxies should I test before purchasing more?

Sample Size Recommendation:

Purchase Size Test Sample Reason
10-50 proxies All of them Small enough to test all
50-200 proxies 20-50 (25%) Representative sample
200-1000 proxies 50-100 (10%) Statistical significance
1000+ proxies 100-200 (5-10%) Large sample sufficient

Statistical Rule:

  • Test at least 30 proxies for meaningful data
  • Aim for 95% working rate
  • If < 80% working, contact provider

What’s a good proxy success rate?

Success Rate Standards:

Rate Quality Action
95-100% ⭐⭐⭐⭐⭐ Excellent Keep provider
85-95% ⭐⭐⭐⭐ Good Acceptable
70-85% ⭐⭐⭐ Acceptable Monitor closely
50-70% ⭐⭐ Poor Contact provider
< 50% ⭐ Very Poor Request refund

Note: Rates vary by proxy type and target:

  • Datacenter on Google: 90-95% normal
  • Residential on Instagram: 95-99% expected
  • Datacenter on Instagram: 50-70% typical

How often should I re-test my proxies?

Re-testing Schedule:

Scenario Frequency Reason
Production Scraping Every 6-12 hours Detect failures early
Social Media Accounts Daily Accounts are sensitive
Long-term Projects Weekly Monitor degradation
One-time Tasks Before use Ensure still working
Static Proxies After issues Diagnose problems
Rotating Proxies Monthly Pool quality check

Automated Monitoring:

# Schedule with cron
0 */6 * * * python /path/to/proxy_tester.py  # Every 6 hours

My test shows elite anonymity but target detects proxy. Why?

Anonymity β‰  Undetectable

Possible Detection Methods:

1. IP Reputation Databases

  • IP is in known proxy lists
  • Solution: Use residential proxies

2. Behavior Patterns

  • Too fast, too perfect, no cookies
  • Solution: Humanize requests, maintain sessions

3. Browser Fingerprinting

  • Headless browser detected
  • Solution: Use stealth plugins, real browser profiles

4. TLS Fingerprinting

  • Proxy’s TLS signature known
  • Solution: Use residential or mobile proxies

Elite anonymity means:

  • βœ… Proxy headers hidden
  • βœ… Your IP hidden
  • ❌ Doesn’t guarantee undetectability

Can I test proxies without knowing the credentials?

With IP Whitelist: βœ… Yes - if your IP is authorized, no credentials needed

Without IP Whitelist: ❌ No - authentication required

Workaround for Unknown Credentials:

# Try common formats
formats = [
    f'http://{ip}:{port}',
    f'http://user:pass@{ip}:{port}',
    f'socks5://{ip}:{port}'
]

for format in formats:
    if test_proxy(format):
        print(f"Working format: {format}")

Should I test free proxy lists?

For Learning: βœ… Yes For Production: ❌ NEVER

Why Test Free Proxies?

  • Learn proxy concepts
  • Test your code
  • Understand different proxy types
  • Practice testing methods

Reality Check:

Free proxy list of 1000 IPs:
βœ… Working: ~50 (5%)
⚑ Fast enough: ~10 (1%)
πŸ”’ Safe to use: ~0 (0%)

Better Alternative:

  • Use free trials from reputable providers
  • Webshare: 10 free residential proxies
  • Proxy6: Trial options available

🎯 Conclusion: Your Proxy Testing Action Plan

Quick Testing (5 minutes)

For beginners or quick checks:

  1. Visit https://ipinfo.io with proxy configured
  2. Verify IP changed and location correct
  3. Check https://whoer.net for anonymity score
  4. Test your target website
  5. If all pass β†’ proxy is working

Comprehensive Testing (30 minutes)

For serious projects:

  1. Availability - Test with online checker or cURL
  2. Speed - Measure response time (< 2 seconds good)
  3. Location - Verify with IP database (IP2Location)
  4. Anonymity - Check leak sites (IPLeak.net)
  5. Type Detection - Confirm datacenter vs residential
  6. Target Compatibility - Test actual website
  7. Consistency - Run tests 5+ times
  8. Documentation - Record all results

Automated Testing (Setup once, run forever)

For professionals:

  1. Use custom testing script
  2. Schedule automated testing (cron/Task Scheduler)
  3. Export results to database
  4. Set up alerts for failures
  5. Monitor trends over time

πŸš€ Next Steps

Now that you know how to test proxies:

Choose Your Proxies:

Set Up Your Proxies:

  • Follow our complete setup guide
  • Configure for your specific platform
  • Implement proper authentication

Learn the Fundamentals:

  • Read What Are Proxies? for comprehensive basics
  • Understand different use cases
  • Learn about pricing and value

Remember: Testing proxies isn’t a one-time task. Regular monitoring ensures your operations run smoothly and helps you catch issues before they impact your projects.


Last Updated: November 4, 2025

Disclaimer: Proxy testing methods and tools may change. Always verify current functionality before relying on any testing method.