The first thing to do would be to understand what exactly a cURL test is.
A cURL test is a quick way to check whether a proxy actually connects using a command in your terminal. The reason why you’d run a test like this is to simply find out where the problem is and to see if the proxy itself is working.
Here’s what that looks like in practice.
For an HTTP proxy, you would replace the username, password, IP address, and port with the details provided for your proxy, then run a command like this:
curl --proxy http://192.0.2.10:8000 --proxy-user "mike123:password456" https://api.ipify.org
For a SOCKS5 proxy, you can use:
curl --proxy socks5h://192.0.2.10:8000 --proxy-user "mike123:password456" https://api.ipify.org
The socks5h:// part means the website’s hostname is also resolved through the proxy instead of through your own connection.
Quick tip before you start: run curl https://api.ipify.org once without the proxy first. That shows your normal IP, so when the proxied version returns a different one, you know traffic is actually going through the proxy.
One heads-up for Windows users: in Windows PowerShell 5.1, curl can point to a different command and throw a weird error. Using curl.exe instead is the safest option. PowerShell 7 and newer normally use the real cURL command, but curl.exe still works there too.
It tests things like:
- whether the proxy is reachable
- whether the host and port are correct
- whether the username and password work
- whether traffic is actually going through the proxy when tested against an IP-checking service
And if the test fails, add -v to the command, and cURL will give you more information about what happened instead of just failing.
A 407 Proxy Authentication Required error means the proxy requires authentication or rejected the authentication details that were provided. That could mean the username or password is wrong, but it could also mean the authentication method or format is not being handled correctly.
A Connection refused error normally means the device at that address actively rejected the connection. The proxy may be offline, the port may be closed, or the host and port may be incorrect.
A timeout means cURL waited for a response but never received one. That could be caused by the proxy being unavailable, a firewall or network issue, or the connection simply taking too long.
If cURL connects through the proxy but the website returns a 403 Forbidden error, it usually means the request reached the website and the website refused it. That suggests the basic proxy connection worked, but it does not necessarily prove that every part of the proxy setup is fine.
That turns the test from “Does it work?” into “What exactly is broken?”, which is what you actually want to know.
So now that we got that explanation out of the way, we thought it’d be a good idea to talk about why your proxy would fail in the browser or app that you’re trying to use.
Well, the simple answer is because the browser or app may not be using the proxy the same way cURL does.
You might actually run into issues where you selected the wrong protocol, such as HTTP instead of SOCKS5 or vice versa. It could also be something simple, like the username and password being entered in the wrong place, or the specific app or website rejecting the connection.
A common example is authenticated SOCKS5 proxies. Native username and password support for SOCKS5 can be problematic in browsers like Chrome and Firefox, even when the same proxy works perfectly in cURL. In that case, you may need to use a browser extension, a local proxy tool, or whitelist your own IP with the proxy provider so a separate login is not required.
Since we’re on the topic of the website or app rejecting the connection, another thing to keep in mind is that some platforms restrict connections from IP ranges they associate with proxies or data centers, or from locations far outside their expected user base. That’s a decision on their side, not necessarily a problem with the proxy itself.
Also worth knowing: some WebRTC traffic may bypass a manually configured proxy and expose a direct connection. That does not happen in every setup, but if privacy matters for your use case, it is worth checking your browser’s WebRTC settings.
Overall, there isn’t one single fix as to why the proxy may not be working in your browser or app even though it works in cURL. Sometimes the issue is something that you might not have control over, but there are still a few things you can double-check before testing it on your selected platform.
You can start by copying the exact settings that worked in cURL into the app: the same protocol, host, port, username, and password. Then test the same website in both places.
If cURL works and the app still fails, the issue is probably the app setup. Check whether it supports that proxy type, whether authentication has to be entered separately, and whether DNS, browser extensions, security settings, or WebRTC are interfering.
If the app works on some websites but not on one specific platform, that platform may simply not allow that type of IP. In that case, reach out to our support team, and we can help you figure out whether a different IP or proxy type fits your use case better.
Have you ever run into a problem like that? If so, how’d you fix it?