Senza KYC — niente documento, selfie o altri documenti. Paga in crypto: BTC, USDT, USDC, ETH, SOL, LTC
Lingua: Italiano
Inizia ora

Riferimento errori proxy · Codici di stato HTTP

407 Proxy Authentication Required: cosa significa e come risolverlo

Codice di stato HTTP (4xx, errore client): il messaggio esatto in ogni strumento, le cause probabili in ordine e la soluzione che funziona.

Ultimo aggiornamento: · 6 minuti di lettura

Risposta rapida

Cosa significa 407 Proxy Authentication Required con un proxy?

407 Proxy Authentication Required significa che il proxy ha rifiutato la tua richiesta perché non ha ricevuto credenziali o ne ha ricevute di errate. Il sito di destinazione non è mai stato contattato. Con i proxy residenziali CrawlRelay, controlla tre cose: che il nome utente sia quello mostrato nella tua dashboard, che la password corrisponda e che ogni carattere speciale in entrambi sia codificato URL. Ritentare la stessa richiesta non risolve mai un 407.

407 Proxy Authentication Required a colpo d'occhio

Errore407 Proxy Authentication Required
TipoCodice di stato HTTP (4xx, errore client)
Inviato daIl proxy gateway, mai il sito web di destinazione
Definito inRFC 9110, section 15.5.8 (headers: Proxy-Authenticate 11.7.1, Proxy-Authorization 11.7.2)
Riprovarlo?No. Le stesse credenziali falliscono di nuovo; correggile prima
Prima verificaEsegui il test curl qui sotto con solo il nome utente e senza parametri di targeting

Cosa significa 407 Proxy Authentication Required?

Un 407 proviene dal proxy, non dal sito che vuoi raggiungere. La RFC 9110 lo descrive come la versione del proxy del 401: il client deve autenticarsi con il proxy prima che avvenga qualsiasi altra cosa. Il proxy invia un'intestazione Proxy-Authenticate che indica lo schema accettato, quasi sempre Basic. Il client risponde con un'intestazione Proxy-Authorization che porta username:password codificato in Base64.

Per un target HTTPS, il 407 arriva in risposta alla richiesta CONNECT che apre il tunnel. Per questo molte librerie lo segnalano come errore di tunnel o connessione, non come stato HTTP: la sessione TLS col sito non è mai iniziata.

Com'è a 407 in Python, curl, Node.js e browser?

Lo stesso errore si presenta in modo diverso in ogni strumento. Questi sono i messaggi da cercare nei log:

  • Python requests: ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Required'))
  • curl: curl: (56) CONNECT tunnel failed, response 407
  • Scrapy: TunnelError: Could not open CONNECT tunnel with proxy ... [{'status': 407, 'reason': b'Proxy Authentication Required'}]
  • Chrome, Playwright, Puppeteer: net::ERR_TUNNEL_CONNECTION_FAILED, o un pop-up di login in un browser visibile
  • Client Node.js su target http://: Request failed with status code 407

Cosa causa a 407?

Probabilmente prima:

  • Nome utente o password errati. Un errore di battitura, una password vecchia dopo un reset, o credenziali di un altro sub-utente.
  • Caratteri speciali non codificati. Una password contenente @, :, / o # rompe l'URL user:pass@host. Codificali in percentuale: @ diventa %40, : diventa %3A.
  • Suffisso di targeting rotto. I gateway che leggono il targeting dal nome utente vedono un nome utente unico molto lungo. Un errore di battitura in una chiave o in un codice paese trasforma il nome in uno sconosciuto al proxy.
  • Credenziali che non lasciano mai il tuo codice. Chrome ignora nome utente e password scritti in --proxy-server. Puppeteer richiede page.authenticate(), e Selenium necessita di un forwarder locale.
  • Saldo vuoto. Controlla che il tuo account abbia ancora traffico disponibile prima di fare debug nel codice.

Come diagnostico a 407 passo dopo passo?

  1. Testa le credenziali con curl senza nessun targeting (comando sotto). Una riga HTTP/1.1 407 nell'output dettagliato conferma un problema di credenziali.
  2. Riaggiungi i parametri di targeting uno alla volta, ripetendo il test dopo ognuno.
  3. Registra l'URL del proxy che il tuo programma costruisce, mascherando la password, e confrontalo carattere per carattere con quello della dashboard.
  4. Se curl riesce e il tuo programma fallisce, la libreria non invia le credenziali. Leggi la soluzione per il tuo strumento qui sotto.
Testa l'URL che fallisce con curl (porta HTTP, verbose)
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL

# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL

Come risolvo a 407?

  • Codifica le credenziali con urllib.parse.quote(value, safe='') in Python o encodeURIComponent() in JavaScript prima di costruire l'URL.
  • Browser: passa username e password nell'opzione proxy di Playwright, chiama page.authenticate() in Puppeteer e usa un forwarder locale per Selenium. Vedi le guide Playwright e Puppeteer.
  • Variabili d'ambiente: se imposti HTTPS_PROXY, metti tutta la stringa tra virgolette nella shell affinché @ e $ restino intatti.
  • Ruota la password nella dashboard se sospetti una fuga, quindi aggiorna ogni scraper che la usa.
Python: costruisci l'URL del proxy con credenziali codificate
from urllib.parse import quote

import requests

user = "USERNAME-country-us"
password = "p@ss:word/1"  # example containing special characters

# safe="" also encodes "/", "@" and ":" inside the credentials
proxy = "http://{}:{}@gw.crawlrelay.com:7777".format(
    quote(user, safe=""), quote(password, safe="")
)
proxies = {"http": proxy, "https": proxy}  # http:// for both keys

r = requests.get("https://api.ipify.org", proxies=proxies, timeout=(10, 30))
print(r.status_code, r.text)
Playwright (Python): credenziali come campi separati
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server": "http://gw.crawlrelay.com:7777",
        "username": "USERNAME-country-us",
        "password": "PASSWORD",
    })
    page = browser.new_page()
    response = page.goto("https://api.ipify.org")
    print(response.status, page.inner_text("body"))
    browser.close()

Devo riprovare dopo a 407?

Non ritentare un 407 automaticamente. Un ritentativo con le stesse credenziali restituisce la stessa risposta, e un loop stretto di ritenti riempie solo i log. Tratta il 407 come un errore di configurazione: ferma il lavoro, correggi le credenziali e riparti. Se un 407 appare improvvisamente in un lavoro che funzionava da giorni, probabilmente la password è stata cambiata o il sub-utente disabilitato.

Come si applica 407 Proxy Authentication Required a CrawlRelay?

Il gateway CrawlRelay legge nome utente e password a ogni nuova connessione. Il targeting e le impostazioni di sessione sono nel nome utente, quindi una password valida può comunque fallire se il suffisso è malformato. Costruisci il nome utente in una funzione helper e registra il suo output all'avvio. La pagina di avvio rapido mostra il formato esatto.

Gateway: gw.crawlrelay.com, porta 7777 (HTTP, HTTPS tramite CONNECT) e porta 7778 (SOCKS5). Formato username: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Correlato: 401 vs 407 · ERR_TUNNEL_CONNECTION_FAILED · Cannot connect to proxy.

407 Proxy Authentication Required: domande frequenti dagli sviluppatori

Un 407 viene inviato dal sito che sto scrivendo?

No. Un 407 è sempre inviato da un proxy che sta tra te e il sito. La richiesta non è mai arrivata al sito, quindi questo non vede il tuo traffico, non lo conta né ti blocca per questo. Se il sito volesse il login risponderebbe con un 401. Correggi le credenziali proxy e il 407 sparisce.

Perché il mio codice riceve 407 quando curl funziona con lo stesso proxy?

La tua libreria non invia le credenziali, oppure le invia in modo diverso. Le cause comuni sono credenziali inserite in un flag del browser che le ignora, una variabile d'ambiente che ha perso i caratteri speciali, o una password non codificata in URL. Stampa l'URL proxy che il codice costruisce, mascherando la password, e confrontalo con il comando curl.

Un 407 utilizza traffico del mio piano?

Una risposta 407 è di poche centinaia di byte, e la richiesta non raggiunge il target, quindi nessuna pagina viene scaricata. Il costo sta altrove: uno scraper bloccato in un loop di retry 407 spreca tempo e riempie i log. Gestisci il 407 come un blocco definitivo nella gestione errori.

Altri errori proxy in questo riferimento

Codici di stato HTTP

Errori del browser e client

Errori di connessione e TLS

Proxy residenziali con documentazione che copre i casi di errore

Proxy residenziali CrawlRelay da 0,50 USD/GB, traffico che non scade mai.

Da 0,50 USD/GB · senza KYC

Inizia ora