A proxy works when it answers in time, exits where you expect, is fast enough for the job, and does not pass your own address on. Test all four, right before you use it. We checked how much that matters on our own free list. Of 200 entries on ordinary addresses it showed as working on September 28, 2026, at 17:10 UTC, 89 answered our checker within 20 seconds. Only 57 answered within 8 seconds, and 3 within a second.
This page shows each test with curl, what our own recheck found, and the faster way with our free checker.
What working means
- It answers in time. Choose the time first. Our list counts a proxy as working if it answered within 90 seconds per protocol. Our checker waits 8 seconds unless you ask for more.
- It exits where you expect. The site sees the exit address, and that address has a country and a network.
- It is fast enough. A page that takes 30 seconds to load is of no use for most jobs.
- It keeps your address to itself. Some proxies pass your own address on to the site.
Does it answer?
within the time you choose
Where does it exit?
the exit address, its country and network
Is it fast enough?
time the connection and the whole request
Does it pass your address on?
transparent, anonymous or elite
A proxy can pass one test and fail another. Run all four.
Test 1: does it answer?
These examples use the documentation address 203.0.113.7. Put your proxy in its place.
# Sends one request through the proxy and gives up after 10 seconds
curl -x http://203.0.113.7:8080 --max-time 10 https://httpbin.org/ip
In the curl manual, -x means "Use the specified proxy", and --max-time means "Set the maximum time in seconds that you allow each transfer to take". A working proxy answers with the address the site saw:
{
"origin": "203.0.113.7"
}
If the origin is your own address, the proxy did not carry the request. If curl stops at the time limit, the proxy is too slow or dead. The origin may differ from the address you dialed. Some proxy hosts send traffic out from another address, which is not a leak by itself. In our recheck, 31 of the 89 proxies that answered did so, and 40 of 109 in the second sample.
Test 2: where does it exit?
Look up the address from test 1. Our free IP lookup API returns its country, network number (ASN), network name, ISP and a datacenter label, with no key.
# Looks up one address, without any proxy
curl "https://hproxy.com/api/ip/203.0.113.7"
Do not trust the country a list prints. In our recheck, 2 of the 89 proxies that answered exited in another country than our own list showed for them, and 10 of 109 in the second sample.
Test 3: is it fast enough?
curl can time the TCP connection and the whole request. In its manual, time_connect is "The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed", and time_total is "The total time, in seconds, that the full operation lasted".
# Prints how long the connection and the whole request took, and discards the page
curl -x http://203.0.113.7:8080 --max-time 20 -o /dev/null -s -w "Connect: %{time_connect}s Total: %{time_total}s\n" https://httpbin.org/ip
On Windows, write -o NUL in place of -o /dev/null. Among the 89 proxies that answered our checker within 20 seconds, the median took 6.7 seconds. Only 3 of the 200 answered within a second.
Test 4: does it pass your address on?
Ask for the headers the site received, over plain HTTP:
# Shows the request headers as the site received them
curl -x http://203.0.113.7:8080 --max-time 10 http://httpbin.org/headers
It has to be plain HTTP. Over HTTPS, the proxy opens a tunnel with the CONNECT method and then limits itself to "blind forwarding of data", as RFC 9110 puts it. It cannot add headers there, so a leaky proxy would look clean. In the answer, look for these:
- Your own address. Usually in X-Forwarded-For, which RFC 7239 names among "the non-standard header fields" used to pass it on, or in Forwarded, X-Real-IP or Client-IP. That makes the proxy transparent.
- A proxy header without your address. Such as Via, which RFC 9110 says "indicates the presence of intermediate protocols and recipients" on the way. That makes it anonymous.
- Neither. That makes it elite, and the site sees an ordinary visitor.
For a SOCKS5 proxy, change the scheme: curl -x socks5://203.0.113.7:1080 --max-time 10 https://httpbin.org/ip. curl also takes socks5h://, socks4:// and socks4a:// there. Our explainer on what a SOCKS5 proxy is covers the difference, and our guide on using proxies with curl covers the rest of curl.
What we found when we checked our own list again
We took 200 entries at random from those our free list API showed as working, on addresses that held fewer than 20 entries of the list. Seconds later, we checked each one again with our own checker, allowing 20 seconds per probe. Seven minutes later, we did it again with another 200.
- Answered. 89 of 200 answered within 20 seconds, and 109 in the second sample. Drawn from every entry of the list at 11:47 UTC, 87 of 200 did.
- Speed. Only 57 of the 89 answered within 8 seconds, the default of our checker, and 3 within a second.
- Timed out. 83 gave no answer within 20 seconds. The list had last checked them a median 31 minutes earlier.
- Grade and country. 29 of the 89 came back with another anonymity grade than the list showed, and 2 in another country. In the second sample, 34 and 10 of 109.
55% lost from Shown as working
36% lost from Answered within 20 seconds
95% lost from Within 8 seconds, our checker's default
Part of the gap is by design. Our list gives each check 90 seconds per protocol, because a slow proxy is still a working one. For you, a proxy that needs 40 seconds is useless. The rest is time: a proxy can stop between two checks. So decide how long you will wait before you test.
The faster way: our free checkers
Paste any proxy into our online proxy checker, with no signup. It makes a real connection through the proxy from our server and reports the exit address, country, latency and anonymity grade. From the command line, it is one request:
# Tests one proxy from our server: alive or dead, protocols, anonymity, latency, country
curl "https://hproxy.com/api/proxy-check?proxy=203.0.113.7:1080"
For a longer wait, the streaming checker takes a per-probe budget. Its documentation lists it in milliseconds: "Per-probe budget, 1,000 to 60,000. Default 8,000".
# Checks two proxies with 20 seconds per probe, one line per proxy as each one finishes
curl -N -X POST https://hproxy.com/api/free-proxy/check -H "Content-Type: application/json" -d '{"proxies": ["203.0.113.7:1080", "198.51.100.3:8080"], "timeout_ms": 20000}'
To pull entries into your own tools, our free proxy list API serves the same list we checked.
Test from where you will use it
Where the check runs decides what it can see. Our online checker and its API test from our server in the United States, so they answer one question: does the proxy work from there? Two kinds of proxy give a different answer from your machine.
- A proxy locked to your IP. Many paid proxies let in only the addresses on their allow list, often called an IP whitelist. From any other server, such a proxy refuses the connection, so only a test from your own address can pass it.
- A proxy that treats networks differently. Some proxies answer one country or network and refuse another. A pass from our server then says little about your connection.
So test from the machine that will use the proxy. The curl commands above do that, and our free HProxy app checks whole lists from your own connection. Its own help puts it this way: "A proxy locked to your IP can only be tested from your IP."
Check right before you use it
A proxy that passed all four tests an hour ago may be gone now. Those in our pool that worked and then stopped lasted a median 10 days, counting only addresses with fewer than 20 of them, without Amazon's networks or one June evening when our checker failed (measured 2026-09-28), and their grades and exits change in between. Our guide to free anonymous proxies goes deeper into the grades, and when free proxies are fine covers the jobs that fit.
When free is not enough
For web tasks that have to keep running, such as checking your own site from another country, a residential proxy is the better tool. Its address belongs to a home connection. Residential Lite costs $0.50/GB for one GB, falling to $0.44/GB at 2,000 GB+, and your balance does not expire. Residential Premium can also limit access to up to 150 of your own addresses with an IP whitelist, the kind of proxy only a test from your own machine can check.
The plain answer
Check a proxy for four things, right before you use it and from the machine that will use it: that it answers within the time you choose, where it exits, how fast it is, and whether it passes your address on. On our own free list, about half of the entries shown as working answered within 20 seconds, and fewer than two in five within 8 seconds. Test first, then trust.
How we measured
On September 28, 2026, at 17:10 and 17:17 UTC, we asked our free list API for every entry it showed as working. Each time we took 200 at random from the entries whose address held fewer than 20 entries of the list. Seconds later, we checked each one with the streaming endpoint of our checker, allowing 20 seconds per probe, from our server in the United States. The figures over every entry come from a sample of 200 drawn from the whole list at 11:47 UTC with the same method. The latency is the fastest answer across the protocols of each proxy. We store no proxy addresses from these checks, and every time is in UTC.
Sources
- The curl manual: curl.se/docs/manpage.html, read September 28, 2026.
- httpbin.org, the /ip and /headers endpoints, read September 28, 2026.
- IETF, RFC 9110: HTTP Semantics, June 2022, sections 7.6.3 on Via and 9.3.6 on CONNECT.
- IETF, RFC 7239: Forwarded HTTP Extension, June 2014.
- HProxy documentation: the proxy checker API and the IP lookup API, read September 28, 2026.



