Proxy Error Code Reference: 400, 403, 407, 429, 502, 503 Explained

Proxy Error Code Reference: 400, 403, 407, 429, 502, 503 Explained

HTTP status codes take on additional meaning when a proxy is involved. A 502 error might originate from the proxy itself or from the target website behind the proxy. A 403 could mean the proxy denied your request or the target website blocked the proxy IP. Understanding where each error originates and what it means in a proxy context is essential for fast, accurate troubleshooting.

This reference guide covers every status code you are likely to encounter when using proxy servers, with proxy-specific explanations and fixes for each.

How to Determine the Error Source

Before diving into specific codes, understand that any HTTP error you receive through a proxy could come from two sources:

  1. The proxy server itself – The proxy generated the error in response to your request
  2. The target website – The proxy forwarded your request, received an error from the target, and passed it back to you

To determine the source, examine the response headers:

curl -v -x http://user:pass@proxy:8080 https://target.com 2>&1

Look for:

  • Server header: If it says squid, nginx, or your proxy provider’s name, the proxy generated the error
  • Via header: Indicates the response passed through the proxy
  • Custom proxy headers: Many providers add headers like X-Proxy-Error with additional context

400 Bad Request

From the Proxy

Meaning: The proxy could not understand your request. The request is malformed at the HTTP protocol level.

Common causes:

  • Malformed proxy URL in your configuration
  • Invalid characters in the request headers
  • Request line exceeds the proxy’s maximum length
  • HTTP version mismatch (sending HTTP/2 to an HTTP/1.1-only proxy)

Fix:

# Verify your request is well-formed
curl -v -x http://proxy:8080 https://httpbin.org/ip 2>&1 | head -20

# Check for encoding issues in your proxy URL
# WRONG: Unencoded special characters
curl -x http://user:p@ss@proxy:8080 https://target.com

# RIGHT: URL-encoded special characters
curl -x http://user:p%40ss@proxy:8080 https://target.com

From the Target

Meaning: The target website rejected the request. The proxy forwarded a valid request, but the target found it malformed. This can happen when the proxy modifies headers in ways the target does not expect.

Fix: Compare the request headers with and without the proxy to identify what the proxy is modifying.

403 Forbidden

From the Proxy

Meaning: The proxy is configured to deny your request. Possible reasons:

  • Your IP is not whitelisted
  • Your subscription has been suspended
  • The proxy has an ACL (Access Control List) that blocks certain destinations or request types
  • Your authentication is valid but your account lacks permission for the requested resource

Fix:

# Check if the proxy itself is returning 403
curl -v -x http://user:pass@proxy:8080 https://httpbin.org/ip

# If httpbin also returns 403, the proxy is blocking you
# Check your provider dashboard for account status

From the Target

Meaning: The target website is blocking the proxy IP. This is extremely common when accessing websites protected by Cloudflare, Akamai, or similar services.

Causes:

  • The proxy IP is on a blocklist
  • The proxy IP is identified as a data center IP
  • The User-Agent or other headers are missing or suspicious
  • Geographic restrictions block the proxy exit node’s location

Fix:

  • Switch to a higher-quality proxy IP. Mobile proxies are least likely to receive 403 errors because they use real carrier IPs
  • Add proper browser headers to your request
  • Rotate to a different IP address
  • Check if the target restricts access by country and use a proxy in the allowed region

407 Proxy Authentication Required

Source: Always from the proxy server.

Meaning: The proxy requires authentication and your request either did not include credentials or included incorrect credentials.

Response includes:

HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="Proxy"

The Proxy-Authenticate header tells you which authentication method the proxy expects.

Fix:

# Add proxy credentials
curl -x http://proxy:8080 -U username:password https://httpbin.org/ip

# Or embed in URL
curl -x http://username:password@proxy:8080 https://httpbin.org/ip
# Python
proxies = {
    "http": "http://username:password@proxy:8080",
    "https": "http://username:password@proxy:8080",
}
response = requests.get("https://httpbin.org/ip", proxies=proxies)

If credentials are correct but 407 persists:

  • URL-encode special characters in the password
  • Check if the proxy expects a different auth scheme (Digest, NTLM instead of Basic)
  • Verify your account is active and not suspended
  • Confirm your IP is whitelisted (if the proxy requires both credentials and IP whitelisting)

For a detailed guide on resolving 407 errors, see our dedicated article on proxy authentication.

408 Request Timeout

From the Proxy

Meaning: Your client opened a connection to the proxy but took too long to send the complete request.

Fix:

  • Reduce the delay between opening the connection and sending the request
  • Check for network issues between your client and the proxy
  • Increase the proxy’s client timeout if you control the proxy server

From the Target

Meaning: The proxy forwarded your request, but the target server timed out waiting for your request body (common with large POST requests).

Fix: Ensure large request bodies are sent efficiently. Check for bandwidth throttling on the proxy that may slow uploads.

429 Too Many Requests

From the Proxy

Meaning: You have exceeded the proxy provider’s rate limit.

Response may include:

HTTP/1.1 429 Too Many Requests
Retry-After: 60

Fix:

import time
import requests

def rate_limited_request(url, proxies, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url, proxies=proxies)
        if response.status_code == 429:
            retry_after = int(response.headers.get("Retry-After", 60))
            print(f"Rate limited. Waiting {retry_after} seconds.")
            time.sleep(retry_after)
            continue
        return response
    raise Exception("Rate limit not cleared after retries")
  • Reduce your request rate
  • Check your plan’s rate limits in the provider dashboard
  • Upgrade to a plan with higher rate limits
  • Distribute requests across multiple proxy endpoints

From the Target

Meaning: The target website is rate-limiting your proxy IP. This is independent of your proxy provider’s limits.

Fix:

  • Reduce request frequency to the specific target
  • Rotate proxy IPs more frequently
  • Add realistic delays between requests
  • Implement exponential backoff
import random
import time

def backoff_request(url, proxies, session, max_retries=5):
    for attempt in range(max_retries):
        response = session.get(url, proxies=proxies)
        if response.status_code == 429:
            wait = (2 ** attempt) + random.uniform(0, 1)
            time.sleep(wait)
            continue
        return response
    return None

502 Bad Gateway

Source: From the proxy server.

Meaning: The proxy received an invalid response from the upstream target server. The proxy is working correctly, but it cannot make sense of what the target returned.

Common causes:

  • Target server is misconfigured or returning malformed responses
  • Target server crashed while processing the request
  • Network error between the proxy and the target
  • The target server closed the connection unexpectedly

Fix:

# Test if the target is accessible directly
curl https://target.com

# Test with a different proxy endpoint
curl -x http://user:pass@alt-proxy:8080 https://target.com

# Check if the target is down
curl -o /dev/null -s -w "%{http_code}" https://target.com
  • If the target is down, wait and retry later
  • If the target works directly but not through the proxy, the proxy-to-target route may have issues
  • Try a proxy endpoint in a different geographic location
  • Implement retry logic with backoff

503 Service Unavailable

From the Proxy

Meaning: The proxy server is temporarily unavailable. Causes include:

  • Proxy server is overloaded
  • Proxy server is undergoing maintenance
  • Your proxy plan’s resources are exhausted

Fix:

  • Wait and retry (check the Retry-After header)
  • Switch to a different proxy endpoint
  • Contact your provider if the issue persists
  • Check the provider’s status page for outage announcements

From the Target

Meaning: The target website is temporarily unavailable or is blocking the proxy IP with a soft block.

Fix:

  • Retry after a delay
  • Rotate to a different proxy IP
  • Verify the target is accessible directly (without proxy)

504 Gateway Timeout

Source: From the proxy server.

Meaning: The proxy forwarded your request to the target, but the target did not respond within the proxy’s timeout window.

Fix:

# Test target responsiveness
curl -o /dev/null -s -w "Total: %{time_total}s\n" https://slow-target.com

# If the target is slow, the proxy's timeout is too short
# You cannot change the proxy's timeout, but you can:
# 1. Try during off-peak hours
# 2. Use a different proxy endpoint
# 3. Contact your provider about timeout settings

511 Network Authentication Required

Source: Network infrastructure (captive portal).

Meaning: You are behind a captive portal (hotel Wi-Fi, airport, etc.) that requires authentication before allowing internet access. Your proxy traffic is being intercepted by the captive portal.

Fix:

  • Open a browser and navigate to any HTTP site to trigger the captive portal login page
  • After authenticating with the captive portal, retry your proxy connection

Quick Reference Table

CodeSourceMeaningFirst Fix
400Proxy or TargetMalformed requestCheck URL encoding
403Proxy or TargetAccess deniedCheck IP whitelist or rotate IP
407ProxyAuth requiredProvide/fix credentials
408Proxy or TargetRequest timeoutSend request faster
429Proxy or TargetRate limitedReduce request rate, backoff
502ProxyBad gatewayCheck target, retry
503Proxy or TargetService unavailableWait, retry, switch endpoint
504ProxyGateway timeoutTarget is slow, retry
511NetworkCaptive portalAuthenticate with portal

Systematic Error Handling

Implement comprehensive error handling in your proxy applications:

import requests
import time

def handle_proxy_response(response, url, proxies, attempt=0, max_retries=3):
    if response.status_code == 200:
        return response

    if response.status_code == 407:
        raise Exception("Proxy authentication failed. Check credentials.")

    if response.status_code == 429:
        retry_after = int(response.headers.get("Retry-After", 30))
        if attempt < max_retries:
            time.sleep(retry_after)
            new_response = requests.get(url, proxies=proxies)
            return handle_proxy_response(new_response, url, proxies, attempt + 1)

    if response.status_code in [502, 503, 504]:
        if attempt < max_retries:
            time.sleep(2 ** attempt)
            new_response = requests.get(url, proxies=proxies)
            return handle_proxy_response(new_response, url, proxies, attempt + 1)

    if response.status_code == 403:
        raise Exception(f"Access denied (403). Proxy IP may be blocked by target.")

    raise Exception(f"Unhandled status code: {response.status_code}")

For comprehensive definitions of HTTP status codes and proxy terminology, visit the proxy glossary. After resolving any error, validate your fix using the proxy testing checklist.

Conclusion

HTTP error codes in a proxy context require you to first determine whether the error originated from the proxy or the target website. The 407 error is always proxy-generated and always means authentication is needed. Errors 502, 503, and 504 are proxy-generated but often reflect target server problems. The 403 and 429 errors can come from either source and require different fixes depending on the origin. Build systematic error handling into your proxy applications, implement retry logic with backoff for transient errors, and escalate persistent errors to your proxy provider with specific error codes and timestamps for faster resolution.


Related Reading

last updated: April 3, 2026

Scroll to Top

Resources

Proxy Signals Podcast
Operator-level insights on mobile proxies and access infrastructure.

Multi-Account Proxies: Setup, Types, Tools & Mistakes (2026)