Torna al blog

Guida Completa: Risolvere i Problemi di Autenticazione Proxy

Perché il proxy risponde 407 o chiude la connessione? Analizziamo le cause degli errori di autenticazione e mostriamo come diagnosticarli e risolverli.

📅10 dicembre 2025
```html

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:

  1. Il ping/telnet verso host e porta del proxy funziona?
  2. Le credenziali sono state copiate senza spazi extra?
  3. I caratteri speciali nella password sono codificati?
  4. Viene utilizzato il protocollo corretto (HTTP vs SOCKS)?
  5. L'IP è stato aggiunto alla whitelist (se si usa l'autenticazione IP)?
  6. L'abbonamento è attivo e il limite di traffico non è stato superato?
  7. 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.

```