Setup & Troubleshooting

How to Check if Your Proxy Is Working

A complete checklist for verifying a proxy: confirm the IP and location, check anonymity headers, test HTTPS, measure speed, detect DNS and WebRTC leaks, and test against your real target.

By Team of Monkeys Editorial Updated 4 min read Affiliate disclosure

This guide contains affiliate links to Geonode. If you buy through them we may earn a commission, at no extra cost to you.

Six things to check

A proxy "working" can mean several things. Check each:

  1. Connectivity: can you connect and authenticate?
  2. IP: does the website see the proxy's IP, not yours?
  3. Location and type: is it in the right country/city, and the right type (residential, datacenter)?
  4. Anonymity: does it add headers revealing you?
  5. Leaks: do DNS or WebRTC reveal your real location?
  6. Target performance: does it actually work on the site you care about?

1. Connectivity and IP

bash
curl -s -x http://USER:PASS@gate.example.com:7777 https://api.ipify.org

If you get an IP that isn't yours, the proxy works. If you get an error, see common proxy errors. Use -v to see the full exchange. See curl proxy.

In a browser, visit any IP-check website after configuring the proxy.

2. Location and IP type

bash
curl -s -x http://USER:PASS@gate.example.com:7777 https://ipinfo.io/json

Check:

  • country, region, city: match your targeting?
  • org: a consumer ISP (Comcast, BT, Deutsche Telekom) for residential/ISP proxies, a hosting company for datacenter, a mobile carrier for mobile.

Different IP databases sometimes disagree, especially at city level. See geo-targeted proxies.

3. Anonymity headers

Over plain HTTP, check what headers reach the server:

bash
curl -s -x http://USER:PASS@gate.example.com:7777 http://httpbin.org/headers

There should be no X-Forwarded-For, Via or Forwarded headers revealing your IP. See proxy anonymity levels.

4. HTTPS support

bash
curl -s -o /dev/null -w '%{http_code}\n' -x http://USER:PASS@gate.example.com:7777 https://www.example.com

A 200 confirms CONNECT tunnelling works.

5. DNS and WebRTC leaks (browsers)

Visit a leak-test site in the configured browser. Check that:

  • DNS servers shown are not your ISP's (if privacy matters).
  • WebRTC doesn't show your real public IP.

See DNS leaks and WebRTC leaks.

6. Speed

Measure connect time and time to first byte:

bash
curl -s -o /dev/null -x http://USER:PASS@gate.example.com:7777 \
  -w 'connect %{time_connect}s  ttfb %{time_starttransfer}s  total %{time_total}s\n' https://www.example.com

See proxy speed test.

7. Rotation and sessions

For rotating proxies, request your IP several times and confirm it changes. For sticky sessions, confirm it stays the same for the expected duration.

bash
for i in 1 2 3 4 5; do curl -s -x http://USER:PASS@gate.example.com:7777 https://api.ipify.org; echo; done

8. Your real target

The final test: request the actual page you care about and check the content is correct, not a block page or CAPTCHA. See how to test proxies before buying.

Proxy tip: When troubleshooting, it helps to have a second, known-good proxy to compare against. A small pay-as-you-go balance from Geonode works well for that, and its dashboard shows usage and active sticky sessions. More in using Geonode in your browser.

Python one-shot checker

python
import requests, time
def check(proxy_url):
    p = {"http": proxy_url, "https": proxy_url}
    t = time.time()
    info = requests.get("https://ipinfo.io/json", proxies=p, timeout=20).json()
    return {"ip": info.get("ip"), "country": info.get("country"), "city": info.get("city"),
            "org": info.get("org"), "seconds": round(time.time() - t, 2)}
print(check("http://USER:PASS@gate.example.com:7777"))

Checking a whole proxy list

python
import concurrent.futures as cf, requests

def check_line(line):
    host, port, user, pw = line.strip().split(":")
    url = f"http://{user}:{pw}@{host}:{port}"
    try:
        r = requests.get("https://ipinfo.io/json", proxies={"http": url, "https": url}, timeout=15)
        j = r.json()
        return line.strip(), "OK", j.get("ip"), j.get("country"), j.get("org")
    except Exception as e:
        return line.strip(), "FAIL", type(e).__name__, None, None

lines = [l for l in open("proxies.txt") if l.strip()]
with cf.ThreadPoolExecutor(20) as ex:
    for row in ex.map(check_line, lines):
        print(*row, sep="\t")

This shows which proxies work, where they exit and which network they belong to.

Interpreting results

ResultMeaning
OK, expected country and ISPWorking as intended
OK, wrong countryTargeting issue or provider mislabel
OK, hosting ASN on a "residential" proxyNot residential; contact provider
FAIL: ProxyErrorAuth or connection problem
FAIL: TimeoutSlow or dead proxy

Checking from the right place

Run checks from the machine that will use the proxies (your server or bot host), not just your laptop. Network paths and whitelisting differ by location.

When "working" isn't enough

A proxy can pass every check above and still fail on your target because the IP is flagged there, or because your client is detected. Always finish with a real target test. See how to test proxies before buying and IP reputation and proxies.

Browser-based checks

In a browser configured with the proxy:

  1. Visit an IP-check site: confirm IP and location.
  2. Visit a WebRTC leak test: confirm no real IP.
  3. Visit a DNS leak test: confirm resolvers aren't your ISP's.
  4. Visit your target: confirm it loads normally.

Proxy check results log

Keep a simple log when checking proxies, especially for static ISP or datacenter lists:

DateProxyIPCountry/CityOrgLatencyTarget OK?Notes

Over time this shows which proxies degrade and helps when requesting replacements or comparing providers. See IP reputation and proxies.

Don't forget IPv6

Many checks only look at IPv4, so a setup can pass every test and still have an IPv6 path that skips the proxy. Add two quick checks.

From the command line, compare an IPv4-only echo service with a dual-stack one:

bash
curl -s -x http://USER:PASS@gate.example.com:7777 https://api.ipify.org
curl -s -x http://USER:PASS@gate.example.com:7777 https://api64.ipify.org

The first always returns an IPv4 address. The second returns an IPv6 address if the exit has one, otherwise IPv4. Either way, both should belong to the proxy, never to your own connection.

In a browser, open test-ipv6.com through the proxy. If it shows your real IPv6 address, something is reaching the internet without going through the proxy. The usual causes:

  • WebRTC, which can reveal local and public addresses directly. See WebRTC leaks and proxies.
  • Apps or extensions that don't use the configured proxy.
  • A VPN or system setting that routes IPv6 differently from IPv4.

If the proxy itself has no IPv6 and the site is IPv6-ready, the browser will simply use IPv4 through the proxy, which is fine. What you're looking for is any address that isn't the proxy's. For the protocol background, see IPv4 vs IPv6 proxies.

Key takeaways

  • A working proxy passes six checks: connectivity, correct IP, right location and IP type, no revealing headers, no DNS/WebRTC leaks, and success on your real target.
  • curl -x ... https://ipinfo.io/json confirms IP, location and network in one command.
  • The org field tells you whether an IP is residential, mobile or hosting.
  • Check rotation by requesting your IP several times; check sticky sessions by polling over time.
  • Always finish with your actual target, because a proxy can be "working" and still be blocked there. See how to test proxies before buying.

FAQ

My proxy shows the right IP but sites still block me. Why?

The IP may be flagged, or your client's fingerprint or behaviour is the problem. See avoiding IP bans when scraping.

Why does my IP lookup show the wrong city?

IP geolocation databases differ and are less accurate at city level.

Affiliate disclosure: Team of Monkeys is a Geonode affiliate. Links and banners marked as sponsored, and links to Geonode in the text, use our referral link, and we may earn a commission if you buy through them, at no extra cost to you. Our explanations and comparisons are written to be useful whichever provider you choose.

Editorial note: Proxy providers change their pools, features and prices often, so treat any figures here as typical ranges at the time of writing and confirm current terms with the provider before you buy.