Six things to check
A proxy "working" can mean several things. Check each:
- Connectivity: can you connect and authenticate?
- IP: does the website see the proxy's IP, not yours?
- Location and type: is it in the right country/city, and the right type (residential, datacenter)?
- Anonymity: does it add headers revealing you?
- Leaks: do DNS or WebRTC reveal your real location?
- Target performance: does it actually work on the site you care about?
1. Connectivity and IP
curl -s -x http://USER:PASS@gate.example.com:7777 https://api.ipify.orgIf 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
curl -s -x http://USER:PASS@gate.example.com:7777 https://ipinfo.io/jsonCheck:
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:
curl -s -x http://USER:PASS@gate.example.com:7777 http://httpbin.org/headersThere should be no X-Forwarded-For, Via or Forwarded headers revealing your IP. See proxy anonymity levels.
4. HTTPS support
curl -s -o /dev/null -w '%{http_code}\n' -x http://USER:PASS@gate.example.com:7777 https://www.example.comA 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:
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.comSee 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.
for i in 1 2 3 4 5; do curl -s -x http://USER:PASS@gate.example.com:7777 https://api.ipify.org; echo; done8. 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
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
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
| Result | Meaning |
|---|---|
| OK, expected country and ISP | Working as intended |
| OK, wrong country | Targeting issue or provider mislabel |
| OK, hosting ASN on a "residential" proxy | Not residential; contact provider |
| FAIL: ProxyError | Auth or connection problem |
| FAIL: Timeout | Slow 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:
- Visit an IP-check site: confirm IP and location.
- Visit a WebRTC leak test: confirm no real IP.
- Visit a DNS leak test: confirm resolvers aren't your ISP's.
- 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:
| Date | Proxy | IP | Country/City | Org | Latency | Target 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:
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.orgThe 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/jsonconfirms IP, location and network in one command.- The
orgfield 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.
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.