I once ran a scraping operation for three weeks before discovering the proxy was not actually routing traffic. The SOCKS5 library was failing silently, falling back to direct connections. Three weeks of requests went out from my actual server IP.

That mistake taught me that proxy testing is not optional, it is critical infrastructure. Here is the complete testing protocol I use before every scraping job.

Test 1: IP Leak Detection

The most basic test: is your traffic actually going through the proxy? Verify your public IP changes when using the proxy. If the proxy IP matches your real IP, the proxy is not routing traffic.

curl test

curl -s -x socks5h://YOUR_API_KEY:YOUR_API_KEY@gw.snowpad.io:9999 https://httpbin.org/ip

Compare the returned IP with your server IP:

curl -s https://httpbin.org/ip

If both return the same IP, your proxy is not routing traffic.

Python test

import requests

proxy = 'socks5h://YOUR_API_KEY:YOUR_API_KEY@gw.snowpad.io:9999'
proxies = {'http': proxy, 'https': proxy}

real_ip = requests.get('https://httpbin.org/ip').json()['origin']
proxy_ip = requests.get('https://httpbin.org/ip', proxies=proxies).json()['origin']

print(f'Real IP: {real_ip}')
print(f'Proxy IP: {proxy_ip}')
assert real_ip != proxy_ip, 'Proxy is not routing traffic!'

Test 2: DNS Leak Detection

DNS leaks are the most common proxy misconfiguration. Your HTTP traffic goes through the proxy, but DNS queries go directly to your ISP. Always use socks5h:// (not socks5://) to route DNS through the proxy. Test at dnsleaktest.com.

You can also verify DNS routing with this Python snippet:

import requests

proxy = 'socks5h://YOUR_API_KEY:YOUR_API_KEY@gw.snowpad.io:9999'
proxies = {'http': proxy, 'https': proxy}

# dnscheck.tools returns the resolver IP used for the request
resp = requests.get('https://dnscheck.tools/api/servers/', proxies=proxies)
print(resp.json())

The DNS resolver should be an Indian IP or an IP that matches your proxy location, not your ISP.

Test 3: WebRTC Leak Detection

WebRTC can bypass proxies entirely, revealing your real IP even when HTTP traffic is routed correctly. Test at browserleaks.com/webrtc. Disable WebRTC in your browser or use leak prevention extensions.

This matters most when using anti-detect browsers or headless browsers with Snowpad. Always enable WebRTC spoofing or disable WebRTC in the browser settings before connecting to a target site.

Test 4: Speed Test

Expected speeds for mobile proxies: 4G delivers 5-25 Mbps, 5G delivers 50-300 Mbps. Under 5 Mbps may indicate weak signal, congestion, or throttling.

Quick throughput test with curl

curl -o /dev/null -w 'Speed: %{speed_download} Mbps\n' \
  -x socks5h://YOUR_API_KEY:YOUR_API_KEY@gw.snowpad.io:9999 \
  https://speed.cloudflare.com/__down?bytes=25000000

The %{speed_download} value is bytes per second. Divide by 1,048,576 to get Mbps. A clean 4G proxy should show at least 5 Mbps; 5G should show 50+ Mbps.

Test 5: Geo-Location Verification

Verify the proxy IP matches your expected location. For scraping Indian sites, the IP should show India. Check ipinfo.io or similar services.

curl -s -x socks5h://YOUR_API_KEY:YOUR_API_KEY@gw.snowpad.io:9999 https://ipinfo.io/json

Look for:

  • country: IN for India
  • org: should mention Jio, Airtel, Vi, or BSNL
  • city: a real Indian city

If the country is not IN, your routing or proxy credentials are wrong.

Test 6: Protocol Support

Verify both HTTP and HTTPS work through the proxy. Some proxies only support one protocol.

curl -s -x socks5h://YOUR_API_KEY:YOUR_API_KEY@gw.snowpad.io:9999 http://httpbin.org/ip
curl -s -x socks5h://YOUR_API_KEY:YOUR_API_KEY@gw.snowpad.io:9999 https://httpbin.org/ip

Both should return the same Indian mobile IP.

Comprehensive Test Script

Save this as test_snowpad_proxy.py and run before every job:

import requests
import time

PROXY_URL = 'socks5h://YOUR_API_KEY:YOUR_API_KEY@gw.snowpad.io:9999'
proxies = {'http': PROXY_URL, 'https': PROXY_URL}

def check_ip():
    real = requests.get('https://httpbin.org/ip').json()['origin']
    via_proxy = requests.get('https://httpbin.org/ip', proxies=proxies).json()['origin']
    assert real != via_proxy, 'Proxy not routing traffic'
    print(f'✓ IP changed: {real} → {via_proxy}')
    return via_proxy

def check_geo(ip):
    info = requests.get(f'https://ipinfo.io/{ip}/json').json()
    assert info.get('country') == 'IN', f'Expected IN, got {info.get("country")}'
    print(f"✓ Geo: {info.get('city')}, {info.get('region')}, {info.get('country')}")
    print(f"✓ ASN: {info.get('org')}")

def check_speed():
    start = time.time()
    resp = requests.get(
        'https://speed.cloudflare.com/__down?bytes=25000000',
        proxies=proxies,
        stream=True,
        timeout=60,
    )
    downloaded = 0
    for chunk in resp.iter_content(chunk_size=8192):
        downloaded += len(chunk)
    duration = time.time() - start
    mbps = (downloaded * 8) / (duration * 1_000_000)
    print(f'✓ Speed: {mbps:.1f} Mbps')
    assert mbps >= 5, f'Speed too low: {mbps:.1f} Mbps'

if __name__ == '__main__':
    ip = check_ip()
    check_geo(ip)
    check_speed()
    print('All Snowpad proxy checks passed.')

FAQ

How do I know if my proxy is working? Check that your public IP changes when using the proxy, DNS resolves through the proxy location, and there are no WebRTC leaks.

What is a DNS leak? A DNS leak occurs when DNS queries bypass the proxy and go directly to your ISP, revealing your real location. Use socks5h:// to prevent this.

What speed should I expect? Indian mobile proxies typically deliver 5-25 Mbps on 4G and 50-300 Mbps on 5G. Under 5 Mbps may indicate weak signal or network congestion.

Should my proxy IP match my target location? Yes. For scraping Indian sites, use Indian proxies. For US sites, use US proxies. Geographic mismatch can trigger anti-bot systems.