# Proxy Not Working? A 10-Step Checklist

> A proxy fails in one of four layers: you cannot reach it, it refuses you, the target refuses it, or it is slow. Map the error to its layer, then run 10 checks.

[Home](https://quanticdata.io/)/[Blog](https://quanticdata.io/blog/)/Proxy Not Working? A 10-Step Checklist

# Proxy Not Working? A 10-Step Checklist

TroubleshootingSep 3, 2026·8 min read·By [Aldo Morese](https://quanticdata.io/about/), founder of QuanticData

On this page [First, find the layer](/blog/proxy-not-working-checklist/#first-find-the-layer) [Layer 1: you cannot reach the proxy](/blog/proxy-not-working-checklist/#layer-1-you-cannot-reach-the-proxy) [Layer 2: the proxy refuses you](/blog/proxy-not-working-checklist/#layer-2-the-proxy-refuses-you) [Layer 3: the proxy works and the target refuses it](/blog/proxy-not-working-checklist/#layer-3-the-proxy-works-and-the-target-refuses-it) [Layer 4: it works, but it is slow or flaky](/blog/proxy-not-working-checklist/#layer-4-it-works-but-it-is-slow-or-flaky) [The 10-step checklist](/blog/proxy-not-working-checklist/#the-10-step-checklist)

“My proxy is not working” describes four different problems. Either you cannot reach the proxy, or the proxy refuses you, or the proxy reaches the site and the site refuses it, or everything works and it is slow. Each layer has its own error strings and its own fix, and most wasted hours come from applying a layer-3 fix, like rotating user agents, to a layer-2 problem, like an IP allowlist. Find the layer first.

## First, find the layer

The exact wording varies by tool, but every message belongs to one row of this table:

| What you see | Layer | Meaning |
| --- | --- | --- |
| `curl: (7) Failed to connect to … port 7777`, `ERR_PROXY_CONNECTION_FAILED`, `ECONNREFUSED`, `ProxyError: Cannot connect to proxy` | 1 | Nothing answered at that host and port |
| `curl: (28) Connection timed out` before any response, `ETIMEDOUT` on the proxy host | 1 | Packets are dropped on the way to the proxy: firewall, wrong network, IPv6 resolution |
| `curl: (5) Could not resolve proxy`, `ENOTFOUND` | 1 | DNS for the proxy hostname failed |
| `407`, `curl: (56) CONNECT tunnel failed, response 407`, `ERR_TUNNEL_CONNECTION_FAILED`, `Tunnel connection failed` | 2 | The proxy answered and refused your credentials or your IP |
| `502` or `503` with the proxy's own server header, `SOCKS5: general server failure` | 2 | The proxy accepted you but could not get an exit: plan limits, no IP for that country, gateway trouble |
| `403`, `429`, a CAPTCHA page, a `200` whose body has no data | 3 | The target saw the request and refused it |
| Works but 5 to 30 seconds per request, intermittent timeouts, “proxies taking so long” | 4 | Latency, tight timeouts, too much concurrency for the plan, or a slow exit |

The one diagnostic to memorise: point the proxy at a URL that cannot refuse you. `https://ipinfo.io/json` returns your exit IP and has no anti-bot layer. If that works, layers 1, 2 and 4 are fine and your problem is the target. If it does not, the target is innocent.

```
curl -sS -w "\ncode=%{http_code} connect=%{time_connect}s tls=%{time_appconnect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
  -x pr.quanticdata.io:7777 -U "USER-country-us:PASS" https://ipinfo.io/json
```

## Layer 1: you cannot reach the proxy

- **Host or port typo.** Copy the endpoint string from the dashboard rather than typing it. Do not add `http://` to the `-x` value unless the tool asks for a URL; do add it in Python, where `proxies` values are URLs.

- **Protocol mismatch.** A SOCKS5 port opened with an HTTP client, or the reverse, produces a refused connection or an empty reply, not a clean error. Check which port is which; on QuanticData the [SOCKS5 endpoints](https://quanticdata.io/socks5-proxies/) are generated separately from the HTTP ones.

- **Egress rules.** Cloud security groups and corporate firewalls commonly allow 80 and 443 only. A proxy on 7777 or 1080 needs an explicit outbound rule. A timeout with no response at all is the signature.

- **IPv6 resolution.** If the proxy hostname resolves to both A and AAAA records and your host prefers IPv6 on a network with broken IPv6, the connect hangs. Force IPv4 with `curl -4` to confirm, then fix the resolver order.

- **DNS.** If the hostname does not resolve, try from another network. A container with no resolver configured is the usual culprit.

## Layer 2: the proxy refuses you

A 407 is the loudest form and has its own guide: [how to fix 407 Proxy Authentication Required](https://quanticdata.io/blog/how-to-fix-407-proxy-authentication-required/). The short version is credentials not sent, credentials wrong, an unencoded `@` in the password, or an IP allowlist that does not contain your current egress IP. Two quieter forms are worth knowing:

- **Plan exhausted or expired.** A plan with zero bandwidth left, or past its term, often behaves like bad credentials. Check the balance before anything else when something that worked yesterday stops today. If a local scrape suddenly fails from a development machine, the plan balance is more likely than TLS or an allowlist.

- **No exit for the request.** A 502 or 503 from the gateway itself, with a country or city flag in the username, means the pool had no available IP matching the flag at that moment. Widen the target, from city to country, or retry with a new session. If your plan is IP-authenticated and you want country targeting, generate the endpoint string via the [proxies endpoint](https://quanticdata.io/docs/) with the geo parameters rather than editing the username by hand.

## Layer 3: the proxy works and the target refuses it

If `ipinfo.io` works and your target does not, the proxy is doing its job and the site is making a decision about the request. That decision is a [403](https://quanticdata.io/blog/web-scraping-403-forbidden/), a [429](https://quanticdata.io/blog/429-too-many-requests-web-scraping/), a CAPTCHA, or a 200 with a challenge or an empty shell where the data should be. Each has a guide, but three proxy-specific causes belong here:

- **Wrong IP type for the target.** A [datacenter](https://quanticdata.io/datacenter-proxies/) exit is labelled as hosting by every IP database, and commerce, travel and social sites treat that label as a signal. A refusal that disappears on a residential exit was never about your code.

- **Geo mismatch.** A site that serves a country-specific storefront or blocks regions returns 403 or a redirect for the wrong exit country. Match the country flag to the market you want to see.

- **A burned exit.** On a rotating pool one request may land on an IP another tenant has already exhausted. A single 429 on the first request is that; retry with a new session rather than backing off for a minute.

A recurring layer-3 trap is the 200 that is not data. Rendered-only pages return an HTML shell to a plain HTTP client, and challenge pages return 200 too. Check the body length and a known selector, not just the status. The [SEO audit API](https://quanticdata.io/seo-audit/) shows exactly what a page looks like without JavaScript versus rendered, which tells you whether the empty body is a block or a rendering requirement.

## Layer 4: it works, but it is slow or flaky

“Why are my proxies so slow” has a physical answer and a configuration answer. Physically, a residential exit is a home connection: expect 300 to 1,500 milliseconds to first byte on a good day, against under 200 milliseconds for a datacenter exit, and expect variance. Configuration is where the losses usually are:

- **Timeouts set for direct connections.** A 5-second timeout that was fine without a proxy now kills a third of your requests. Use 30 seconds for connect and read on residential, and count the timeouts before deciding the proxy is broken.

- **Concurrency above what the plan or the exit tolerates.** Two hundred parallel connections through one sticky session are two hundred connections through one home router. Spread sessions, or use rotating mode for stateless fetches.

- **Sticky when you wanted rotating, or the reverse.** Rotating mode pays a new TLS handshake and a new exit per request; sticky mode reuses the path. For one-shot page fetches rotate; for multi-step flows stick. The [rotating proxy explainer](https://quanticdata.io/blog/what-is-a-rotating-proxy/) covers the trade-off.

- **DNS through the proxy.** With HTTP proxies the proxy resolves the target; with SOCKS5 make sure the client sends the hostname (`socks5h://` in Python) or you resolve locally, leak your resolver's location and sometimes get the wrong regional server.

- **Retries without a budget.** Three retries on every failure triple the load exactly when the exit is struggling. Retry once with a new session, then move on and record the URL.

The curl timing line above separates these. A high `connect` is layer 1 or a distant gateway; a high `tls` with a low `connect` is the CONNECT tunnel plus handshake through a slow exit; a high `ttfb` with everything else low is the target being slow, which no proxy fixes.

## The 10-step checklist

1. Fetch `https://ipinfo.io/json` through the proxy with the curl timing line. Note the code and the four timings.

2. If it did not connect: check host, port, protocol, and egress firewall rules. Try `curl -4`.

3. If it connected and returned 407: run the 407 guide's five checks, starting with plan balance and allowlist.

4. If it returned 502 or 503 from the gateway: drop city and state flags, retry with a new session.

5. If it returned 200: read the exit IP and country. Wrong country means a flag typo or an unsupported target for the plan.

6. Now fetch the real target, same command. A 403, 429 or challenge is layer 3: switch to the relevant guide.

7. Got 200? Check the body length and one known selector before trusting it.

8. Slow? Compare the four timings against a datacenter exit or a direct fetch to see which segment is slow.

9. Flaky? Count timeouts versus errors over 100 requests; raise timeouts to 30 seconds and lower concurrency before blaming the pool.

10. Still stuck? Send the provider the timing line, the exit IP, the exact error string and the timestamp. Those five facts are what support needs, and they are what this checklist produced.

### Sources & further reading

- [curl — Exit codes](https://curl.se/docs/manpage.html#EXIT)

- [curl — --write-out variables (time_connect, time_appconnect, time_starttransfer)](https://curl.se/docs/manpage.html#-w)

- [Chromium — net error list (ERR_PROXY_CONNECTION_FAILED, ERR_TUNNEL_CONNECTION_FAILED)](https://chromium.googlesource.com/chromium/src/+/main/net/base/net_error_list.h)

- [RFC 1928 — SOCKS Protocol Version 5](https://www.rfc-editor.org/rfc/rfc1928)

- [Requests documentation — Proxies and SOCKS](https://requests.readthedocs.io/en/latest/user/advanced/#proxies)

## FAQ

Quick answers on proxy not working.

[Something else? Ask us →](mailto:hello@quanticdata.io)

### Why is my proxy not working?

One of four layers failed: you cannot reach the proxy (wrong host, port, protocol, or a firewall), the proxy refuses you (407, allowlist, exhausted plan), the proxy works but the target refuses it (403, 429, CAPTCHA), or it works and is slow (timeouts, concurrency, a slow exit). Fetch ipinfo.io through the proxy first: if that works, the first two layers and the speed layer are fine and the problem is the target.

### What does ERR_PROXY_CONNECTION_FAILED mean?

Chrome could not open a TCP connection to the proxy host and port at all. Nothing answered. It is a layer-1 error: a typo in the host or port, an HTTP proxy address entered where the system expects a PAC file, a firewall blocking the port, or the proxy service being down. Credentials and the target website are not involved yet.

### Why are my proxies so slow?

Residential exits are home connections and add 300 to 1,500 ms to first byte; that part is physics. The rest is configuration: timeouts tuned for direct connections, too many concurrent requests through one sticky session, rotating mode paying a handshake per request when a sticky session would reuse it, or a slow target. Use curl -w with time_connect, time_appconnect and time_starttransfer to see which segment is slow.

### Why do my proxies keep failing on some sites but not others?

Because the proxy is working and the target is deciding. Sites with bot management look at IP type, TLS fingerprint and headers; a datacenter exit fails where a residential one passes, and a wrong exit country hits geo rules. Test the proxy against ipinfo.io to prove it works, then treat the failing site as a 403 or 429 problem.

### How do I test if a proxy is working?

curl -x host:port -U user:pass https://ipinfo.io/json with -w to print the status code and timings. A 200 with an exit IP different from your own proves the proxy works end to end. Then repeat against your real target; any difference between the two results is the target's decision, not the proxy.

## A gateway that tells you which layer failed

Residential proxies from $0.80/GB with per-request country targeting, sticky sessions, and an API to list plans, generate endpoints and manage the IP allowlist. Or skip the layers: the web scraping API bills $0.0002 per successful page and never charges a failed one. Every account gets $2 of free usage a month.

[Start free — $2/month included](https://quanticdata.io/signup/)[Explore Residential Proxies from $0.80/GB](https://quanticdata.io/residential-proxies/)

## Related reading

[Troubleshooting How to Fix 407 Proxy Authentication Required A 407 is the proxy refusing to forward your request until it sees credentials it accepts, so rotating headers or slowing down cannot fix it. On HTTPS it does not even arrive as a status code. How to read the challenge, tell the five causes apart, and fix each one in curl, Python requests, httpx, Node and Scrapy. Read →](https://quanticdata.io/blog/how-to-fix-407-proxy-authentication-required/) [Troubleshooting Web Scraping 403 Forbidden: Causes and Fixes The browser loads the page and your script gets 403. The response headers usually name the system that refused you, and that decides the fix: a user agent, the full header set, the IP type, or the TLS fingerprint. A decision tree you can run in five minutes, Python fixes for each branch, and what we saw fetching 16 major sites with a pure HTTP client behind US residential IPs. Read →](https://quanticdata.io/blog/web-scraping-403-forbidden/) [Troubleshooting How to Fix 429 Too Many Requests When Scraping A 429 is the one block that tells the truth: you crossed a rate limit. What it does not tell you is what the limit is keyed on, and that decides whether proxies help at all. A two-request test to find the key, backoff code that honours Retry-After, the concurrency formula that turns pages per hour into IPs in flight, and a per-host token bucket. Read →](https://quanticdata.io/blog/429-too-many-requests-web-scraping/)

## Also on this site

Quantic**Data**

Residential proxies & web data APIs for AI.

#### Proxies

- [Residential Basic](https://quanticdata.io/residential-proxies/#basic)

- [Residential Premium](https://quanticdata.io/residential-proxies/#plans)

- [Cheap Residential](https://quanticdata.io/cheap-residential-proxies/)

- [Mobile Proxies](https://quanticdata.io/mobile-proxies/)

- [Datacenter Proxies](https://quanticdata.io/datacenter-proxies/)

- [ISP Proxies](https://quanticdata.io/isp-proxies/)

- [Rotating Proxies](https://quanticdata.io/rotating-proxies/)

- [Sneaker Proxies](https://quanticdata.io/sneaker-proxies/)

- [SOCKS5 Proxies](https://quanticdata.io/socks5-proxies/)

- [IPv6 Proxies](https://quanticdata.io/ipv6-proxies/)

- [Proxy locations](https://quanticdata.io/proxies/)

#### Data APIs

- [MCP Server](https://quanticdata.io/mcp-server/)

- [Web Scraper API](https://quanticdata.io/web-scraping-api/)

- [SERP API](https://quanticdata.io/serp-api/)

- [Collectors](https://quanticdata.io/collectors/)

- [Web Data for AI](https://quanticdata.io/web-data-api-for-ai/)

- [Quantic AI](https://quanticdata.io/ai-web-scraping-service/)

- [Crawl & Map](https://quanticdata.io/crawl-map/)

- [SEO Audit](https://quanticdata.io/seo-audit/)

#### Use cases

- [Company data](https://quanticdata.io/scrape-company-data/)

- [Price monitoring](https://quanticdata.io/competitor-price-monitoring/)

- [Market research](https://quanticdata.io/market-research-data/)

- [Real estate data](https://quanticdata.io/real-estate-data-scraping/)

- [Scrape job postings](https://quanticdata.io/scrape-job-postings/)

#### Company

- [Documentation](https://quanticdata.io/docs/)

- [Blog](https://quanticdata.io/blog/)

- [Free tools](https://quanticdata.io/tools/)

- [Partners](https://quanticdata.io/partners/)

- [About](https://quanticdata.io/about/)

- [Alternatives](https://quanticdata.io/alternatives/)

- [Pricing](https://quanticdata.io/pricing/)

- [FAQ](https://quanticdata.io/#faq)

- [For AI agents](https://quanticdata.io/#ai)

#### Free tools

- [All tools](https://quanticdata.io/tools/)

- [Website to Markdown](https://quanticdata.io/tools/website-to-markdown/)

- [PDF to Markdown](https://quanticdata.io/tools/pdf-to-markdown/)

- [WAF detector](https://quanticdata.io/tools/waf-detector/)

- [AI visibility audit](https://quanticdata.io/tools/ai-visibility-audit/)

- [AI crawler checker](https://quanticdata.io/tools/ai-crawler-checker/)

- [robots.txt tester](https://quanticdata.io/tools/robots-txt-tester/)

- [robots.txt generator](https://quanticdata.io/tools/robots-txt-generator/)

- [User agent](https://quanticdata.io/tools/user-agent/)

- [cURL converter](https://quanticdata.io/tools/curl-converter/)

- [Proxy tester](https://quanticdata.io/tools/proxy-tester/)

© 2026 QuanticData ·

- [quanticdata.io](https://quanticdata.io/)

·

- [Terms](https://quanticdata.io/terms/)

·

- [Privacy](https://quanticdata.io/privacy/)

If you are an AI agent:

- [llms.txt](https://quanticdata.io/llms.txt)

·

- [llms-full.txt](https://quanticdata.io/llms-full.txt)

---

Source: https://quanticdata.io/blog/proxy-not-working-checklist/ · Site index for AI: https://quanticdata.io/llms.txt · Full dump: https://quanticdata.io/llms-full.txt
