Use curl --proxy and --proxy-user against an authorized check URL. Compare direct vs proxied results, then debug 407 or timeouts. Fake placeholders; real code blocks. Console wins. Not for mainland China.
Before you paste credentials into an app, run a minimal curl check against a URL you may access, and confirm the request goes through the proxy. String shapes: Proxy format. Protocol: HTTP / SOCKS5 setup. Application examples: Python and Node.js Axios. Commands follow Docs EN quickstart.
ZTProxy sells rotating residential (per GB) and static residential (per IP·month). Hosts and credentials below are fake placeholders. The check URL must be one you may call. The sample uses `https://example.com`—do not treat a third-party lookup site as this company’s official API. Not for mainland China.
What the check is for
| Step | What you want to confirm |
|---|---|
| An optional direct request | A baseline without the proxy |
| The same authorized URL through the proxy | The request actually used the proxy (auth worked; it is not leaving from your machine alone) |
| The order region, if needed | The exit is consistent with the country you selected (geo databases are only a hint) |
Environment variables and an HTTP proxy sample
Store credentials in the current shell. Prefer `--proxy-user` so a full password-bearing URL is less likely to sit in shell history.
export ZT_PROXY_USER='USER_EXAMPLE'
export ZT_PROXY_PASS='PASS_EXAMPLE_NOT_REAL'
export ZT_PROXY_HOST='proxy.example.invalid'
export ZT_PROXY_PORT='10000'
# Replace these fakes with console values before you run
# Authorized target example: https://example.com
curl -sS --connect-timeout 10 --max-time 30 \
--proxy "http://${ZT_PROXY_HOST}:${ZT_PROXY_PORT}" \
--proxy-user "${ZT_PROXY_USER}:${ZT_PROXY_PASS}" \
"https://example.com" -o /dev/null -w "%{http_code}\n"
Look for the HTTP status you expect (example.com is often 200) and whether you get a 407. Do not treat the fake host as a real gateway.
Optional: SOCKS5 and socks5h
Switch only if the console returns SOCKS5. `socks5h://` resolves DNS through the proxy, which helps the resolved address match the exit region; `socks5://` may resolve on your machine first. Do not assume UDP is available.
curl -sS --connect-timeout 10 --max-time 30 \
--proxy "socks5h://${ZT_PROXY_HOST}:${ZT_PROXY_PORT}" \
--proxy-user "${ZT_PROXY_USER}:${ZT_PROXY_PASS}" \
"https://example.com" -o /dev/null -w "%{http_code}\n"
On Windows, call `curl.exe` if `curl` is mapped to another command.
How to read the result
A 407 usually means auth failed: recopy the console username and password, and check that the shell did not eat special characters. A hang usually means protocol or port, and you should set timeouts. If a business site returns 403 or 429, separate “the proxy never connected” from “the site rejected this request”—the latter is not automatically a gateway fault. Full table: 407, timeouts, and exit checks.
A rotating exit may change across new connections; that is not automatically a failure. A static order should stay relatively fixed for the term. See rotating vs static and sticky vs static.
Limits
Check only authorized targets. Do not load-test sites you do not have rights to. Prices follow the console (about $0.40/GB rotating, about $0.20/GB for the 100 TB bundle; shared static about $1.50 and dedicated about $5 per IP·month). USDT/USDC available; Visa/Mastercard applying. Not for mainland China.
FAQ
Can I curl the sample host as-is?
No. Replace it with the host and port the console returns.
Must I use a public IP-lookup site?
No. Use any URL you may access and can judge. example.com is only a placeholder.
Why prefer --proxy-user?
It keeps the username and password off the proxy URL, which lowers the chance that a full credential string lands in shell history. Still protect environment variables and terminal logs.
What is the difference between socks5 and socks5h?
`socks5h` resolves DNS through the proxy; `socks5` may resolve locally. Follow the console protocol.
Does a successful check mean the business job will succeed?
No. It only shows that auth and the tunnel worked for this hop. The business site can still respond under its own rules.
Is a different exit IP on every curl normal?
If you bought rotating residential, a new connection may use a new exit. If you bought static, re-check the order and the troubleshooting page.
Where do I go after a 407?
Re-check console credentials and encoding, then open the troubleshooting guide.
Where are prices confirmed?
In the console and on Pricing.