Come risolvere i problemi di autenticazione del proxy: guida completa
Codice 407, reset della connessione, timeout durante la connessione: sintomi familiari? Gli errori di autenticazione del proxy si verificano costantemente, ma nel 90% dei casi si risolvono in pochi minuti. Esamineremo le cause e mostreremo metodi concreti di diagnostica.
Come funziona l'autenticazione proxy
Prima di cercare l'errore, è importante capire il meccanismo. I server proxy utilizzano due metodi principali di autenticazione:
Autenticazione tramite login e password (Basic Auth) — Il client invia l'header Proxy-Authorization con le credenziali codificate in Base64. Questo è il metodo standard per i proxy HTTP.
Autenticazione tramite IP (IP Whitelist) — Il server controlla l'indirizzo IP del client rispetto a una lista bianca. Nessun login: se il tuo IP è nella lista, l'accesso è consentito.
Per i proxy SOCKS5, lo schema è simile, ma l'autenticazione avviene a livello di protocollo anziché tramite header HTTP.
Errori comuni e il loro significato
| Errore | Significato | Causa probabile |
|---|---|---|
407 Proxy Authentication Required |
Il proxy richiede l'autorizzazione | Credenziali non inviate o errate |
403 Forbidden |
Accesso negato | IP non in whitelist, abbonamento scaduto |
Connection reset |
Connessione resettata | Protocollo errato, blocco firewall |
Connection timeout |
Timeout di connessione | Host/porta errati, problemi di rete |
SOCKS5 auth failed |
Errore di autenticazione SOCKS | Credenziali errate o metodo incompatibile |
Problemi con le credenziali
La causa più frequente dell'errore 407 è un semplice errore di battitura o confusione con i dati. Controlla:
- Copia con spazi — copiando dal pannello di controllo si possono includere spazi invisibili all'inizio o alla fine della stringa
- Sensibilità al maiuscolo/minuscolo — username e password sono case-sensitive
- Confusione tra account — i dati del tuo pannello utente sono spesso diversi dai dati di accesso al proxy
- Scadenza — l'abbonamento è terminato, anche se i dati sono formalmente validi
Verifica rapida: prova ad autenticarti tramite curl:
curl -v -x http://user:password@proxy.example.com:8080 https://httpbin.org/ip
Il flag -v mostrerà l'intero processo di connessione, inclusa la risposta del server proxy.
Whitelist IP: le insidie
L'autenticazione tramite IP sembra comoda — non è necessario passare password nel codice. Ma ci sono delle trappole:
IP dinamico del provider. Gli ISP domestici cambiano l'IP al riavvio del router o secondo una pianificazione. Ieri funzionava, oggi restituisce 403.
NAT e IP condivisi. Se ti trovi dietro un NAT aziendale, il tuo IP esterno è condiviso da decine di colleghi. Aggiungere un IP del genere a una whitelist è una falla di sicurezza.
VPN e server cloud. L'IP del tuo VPS può cambiare durante la migrazione o il riavvio. AWS, Google Cloud e altri provider non garantiscono IP statici senza un Elastic/Static IP.
Come scoprire il tuo attuale IP esterno:
curl https://api.ipify.org
# oppure
curl https://ifconfig.me
Confronta il risultato con l'IP presente nella whitelist del tuo fornitore di proxy.
Codifica e caratteri speciali nella password
Se la password contiene caratteri speciali (@, :, #, %), questi possono rompere il formato URL del proxy. Il carattere @ è particolarmente insidioso, in quanto separa le credenziali dall'host.
Esempio di problema: la password p@ss:word nella stringa http://user:p@ss:word@proxy.com:8080 verrà interpretata in modo errato.
Soluzione: codifica URL dei caratteri speciali:
| Carattere | Codifica |
|---|---|
@ |
%40 |
: |
%3A |
# |
%23 |
% |
%25 |
/ |
%2F |
La password p@ss:word si trasforma in p%40ss%3Aword.
In Python, la codifica viene eseguita automaticamente:
from urllib.parse import quote
password = "p@ss:word"
encoded_password = quote(password, safe='')
print(encoded_password) # p%40ss%3Aword
Diagnostica passo passo
Quando il proxy non funziona, controlla in questo ordine:
Passo 1: Verifica la raggiungibilità del server
# Controllo della connessione TCP
nc -zv proxy.example.com 8080
# Oppure tramite telnet
telnet proxy.example.com 8080
Se la connessione non viene stabilita, il problema è a livello di rete: host errato, porta errata o firewall.
Passo 2: Verifica l'autenticazione senza l'applicazione
# Proxy HTTP
curl -v --proxy-user "username:password" -x http://proxy.example.com:8080 https://httpbin.org/ip
# Proxy SOCKS5
curl -v --proxy-user "username:password" -x socks5://proxy.example.com:1080 https://httpbin.org/ip
Se curl funziona ma la tua applicazione no, il problema risiede nel codice o nella configurazione dell'applicazione.
Passo 3: Verifica il protocollo
Un errore comune è usare un client HTTP per un proxy SOCKS o viceversa. Verifica il tipo di proxy con il tuo fornitore:
- Proxy HTTP/HTTPS — funzionano tramite header, porte tipiche 8080, 3128, 8888
- SOCKS4/SOCKS5 — protocollo binario, porte tipiche 1080, 1081
Passo 4: Controlla i log del fornitore
Molti fornitori mostrano i log delle connessioni nel pannello utente. Qui puoi vedere se la richiesta è arrivata al server, quali credenziali sono state inviate e perché è stata rifiutata.
Esempi di codice per vari linguaggi
Python (requests)
import requests
from urllib.parse import quote
# Esegui l'escape dei caratteri speciali nella password
username = "user123"
password = quote("p@ss:word", safe='')
proxies = {
"http": f"http://{username}:{password}@proxy.example.com:8080",
"https": f"http://{username}:{password}@proxy.example.com:8080"
}
try:
response = requests.get(
"https://httpbin.org/ip",
proxies=proxies,
timeout=10
)
print(response.json())
except requests.exceptions.ProxyError as e:
print(f"Errore proxy: {e}")
Python (aiohttp per richieste asincrone)
import aiohttp
import asyncio
from aiohttp_socks import ProxyConnector
async def fetch_with_proxy():
# Per SOCKS5
connector = ProxyConnector.from_url(
'socks5://user:password@proxy.example.com:1080'
)
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get('https://httpbin.org/ip') as response:
return await response.json()
# Per proxy HTTP
async def fetch_with_http_proxy():
async with aiohttp.ClientSession() as session:
async with session.get(
'https://httpbin.org/ip',
proxy='http://user:password@proxy.example.com:8080'
) as response:
return await response.json()
Node.js (axios)
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');
const proxyUrl = 'http://user:password@proxy.example.com:8080';
const agent = new HttpsProxyAgent(proxyUrl);
axios.get('https://httpbin.org/ip', {
httpsAgent: agent
})
.then(response => console.log(response.data))
.catch(error => {
if (error.response?.status === 407) {
console.log('Errore di autenticazione proxy');
}
});
PHP (cURL)
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://httpbin.org/ip',
CURLOPT_PROXY => 'proxy.example.com:8080',
CURLOPT_PROXYUSERPWD => 'user:password',
CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
echo 'Errore: ' . curl_error($ch);
} elseif ($httpCode === 407) {
echo 'Errore di autenticazione proxy';
} else {
echo $response;
}
curl_close($ch);
Selenium (Python)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Per i proxy con autenticazione in Selenium è necessaria un'estensione
# L'opzione più semplice è usare un proxy con whitelist IP
chrome_options = Options()
chrome_options.add_argument('--proxy-server=http://proxy.example.com:8080')
# Per l'autenticazione tramite estensione
# (richiede la creazione di manifest.json e background.js)
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://httpbin.org/ip')
Suggerimento: Selenium gestisce male i proxy che richiedono login/password. Per l'automazione del browser, è meglio utilizzare proxy residenziali con autenticazione IP — questo eviterà problemi con le finestre di autenticazione a comparsa.
Caratteristiche dei diversi tipi di proxy
I problemi di autenticazione possono dipendere dal tipo di proxy:
Proxy datacenter utilizzano solitamente credenziali statiche. Se smettono di funzionare, controlla la scadenza o il limite di traffico.
Proxy residenziali spesso utilizzano la rotazione. Le credenziali possono includere parametri di sessione nel login (es. user-session-abc123). Un formato errato è causa di errori.
Proxy mobili possono richiedere parametri aggiuntivi per il cambio IP. Consulta la documentazione del fornitore: il formato delle richieste di rotazione è diverso.
Checklist per una diagnostica rapida
Salva questo elenco per problemi futuri:
- Il ping/telnet verso host e porta del proxy funziona?
- Le credenziali sono state copiate senza spazi extra?
- I caratteri speciali nella password sono codificati?
- Viene utilizzato il protocollo corretto (HTTP vs SOCKS)?
- L'IP è stato aggiunto alla whitelist (se si usa l'autenticazione IP)?
- L'abbonamento è attivo e il limite di traffico non è stato superato?
- curl funziona con le stesse credenziali?
Conclusione
La maggior parte degli errori di autenticazione del proxy si risolve controllando le basi: correttezza delle credenziali, codifica dei caratteri speciali, corrispondenza dell'IP nella whitelist. Se i controlli semplici non hanno funzionato, usa curl con il flag -v per una diagnostica dettagliata.
Per compiti di scraping e automazione dove la stabilità della connessione è fondamentale, è più conveniente utilizzare proxy residenziali con un sistema di autenticazione flessibile — scopri di più su proxycove.com.