Torna al blog

Come diagnosticare le cause del basso tasso di successo

Il tasso di successo dei proxy è una metrica critica per qualsiasi progetto. Analizziamo come identificare la causa del calo e ripristinare l efficienza.

📅3 dicembre 2025

Come diagnosticare la causa del basso success rate: guida passo dopo passo

Il success rate è la percentuale di richieste riuscite rispetto al numero totale di tentativi. Quando questo indicatore scende al di sotto della norma, si perdono soldi, tempo e dati. Ma le cause possono essere decine: da una configurazione errata ai blocchi del server di destinazione. In questo articolo analizzeremo un approccio sistematico alla diagnosi e troveremo una soluzione.

Cos'è il success rate e quale norma

Success rate (SR) = (Richieste riuscite / Numero totale di richieste) × 100%

I valori normali dipendono dal tipo di compito:

Compito SR normale Livello critico
Parsing di dati pubblici 95–99% sotto l'85%
Automazione SMM 90–97% sotto l'80%
Verifica degli annunci 98–99.5% sotto il 95%
Integrazione API 99–99.9% sotto il 98%

Se il SR è sceso del 5–10% dalla tua linea di base, è un segnale per la diagnosi. Se è sceso del 20%+ è necessario agire immediatamente.

Primi passi della diagnosi

Passaggio 1: Controlla i log e le metriche

Raccogli i dati degli ultimi 24–72 ore:

  • Quando esattamente è sceso il SR? (ora esatta)
  • Quale percentuale di richieste restituisce l'errore 407 (Proxy Authentication Required)?
  • Quale percentuale — 429 (Too Many Requests)?
  • Quale percentuale — timeout (connection timeout)?
  • Il carico è cambiato (RPS — richieste al secondo)?

Passaggio 2: Testa in isolamento

Usa uno script semplice per verificare il proxy senza la tua applicazione:

import requests
import time

proxy = "http://proxy_ip:port"
proxies = {"http": proxy, "https": proxy}
target_url = "https://httpbin.org/ip"

success = 0
failed = 0

for i in range(100):
    try:
        response = requests.get(
            target_url, 
            proxies=proxies, 
            timeout=10,
            verify=False
        )
        if response.status_code == 200:
            success += 1
            print(f"✓ Tentativo {i+1}: successo")
        else:
            failed += 1
            print(f"✗ Tentativo {i+1}: stato {response.status_code}")
    except Exception as e:
        failed += 1
        print(f"✗ Tentativo {i+1}: {str(e)}")
    time.sleep(0.5)

sr = (success / (success + failed)) * 100
print(f"\nSuccess Rate: {sr:.1f}%")
print(f"Riusciti: {success}, Errori: {failed}")

Se questo test mostra un SR normale, il problema è nel tuo codice o nella configurazione. Se il SR è basso anche qui, il problema è nel proxy o nel server di destinazione.

Problemi dal lato del proxy

Errore 407: Proxy Authentication Required

Cause:

  • Credenziali errate (login/password)
  • Account scaduto
  • Indirizzo IP non nella whitelist (se richiesto)
  • La rotazione IP non funziona o è disabilitata

Soluzione:

import requests

# Formato corretto per proxy residenziali
proxy = "http://login:password@proxy-host:port"
proxies = {"http": proxy, "https": proxy}

# Test
response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print(response.text)

Sovraccarico del server proxy

Se tutti gli utenti del servizio inviano un'enorme quantità di richieste contemporaneamente, potrebbe esserci un limite di RPS (richieste al secondo). È raro, ma accade.

Verifica:

  • Il tuo RPS attuale al picco
  • I limiti del tuo piano tariffario
  • Ci sono errori 429 nei log

Soluzione: aggiungi un ritardo tra le richieste o aggiorna il piano tariffario.

Qualità degli indirizzi IP

Per i proxy residenziali un basso SR potrebbe significare che ti vengono ruotati indirizzi bloccati. Verifica:

  • Quale percentuale di indirizzi IP restituisce 403 Forbidden?
  • Si ripetono gli stessi indirizzi?
  • C'è un pattern — un paese/regione funziona, un altro no?

Blocchi e filtri del server di destinazione

Errore 429: Too Many Requests

Il server di destinazione vede troppi richieste da un IP o in generale. Soluzioni:

  • Aggiungi un ritardo: `time.sleep(random.uniform(1, 3))`
  • Usa la rotazione IP: ogni richiesta — nuovo IP
  • Riduci l'RPS: invia le richieste in sequenza, non in parallelo
  • Aggiungi intestazioni realistiche: User-Agent, Referer, Accept-Language

Errore 403 Forbidden

Il server ha bloccato il tuo IP (o l'IP del proxy). Questo potrebbe essere:

  • Filtro per geolocalizzazione
  • Lista nera dei servizi proxy
  • Rilevatore di bot (JavaScript, CAPTCHA)

Soluzione: usa proxy mobili o proxy residenziali con rotazione. Sono più difficili da bloccare.

Errore 403: Verifica User-Agent

Alcuni servizi rifiutano le richieste con User-Agent sospetti:

import requests
import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
    "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15"
]

headers = {
    "User-Agent": random.choice(user_agents),
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml",
    "Referer": "https://google.com"
}

response = requests.get(
    "https://target-site.com",
    headers=headers,
    proxies={"http": proxy, "https": proxy},
    timeout=10
)
print(response.status_code)

Errori nel codice del client

Gestione errata delle eccezioni

Errore comune: il codice considera un errore di connessione come una richiesta non riuscita, ma non tenta di riconnettersi:

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# Modo corretto con retry
session = requests.Session()
retry_strategy = Retry(
    total=3,
    backoff_factor=1,
    status_forcelist=[429, 500, 502, 503, 504],
    allowed_methods=["GET", "POST"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)

try:
    response = session.get(url, proxies=proxies, timeout=10)
except requests.exceptions.RequestException as e:
    print(f"Errore: {e}")
    # Registra e passa alla richiesta successiva

Timeout errati

Se il timeout è troppo breve (1–2 secondi), i proxy lenti verranno rifiutati:

  • Per il parsing normale: 10–30 secondi
  • Per proxy mobili: 15–45 secondi
  • Per API: 5–10 secondi

Errori SSL/TLS

Se usi `verify=False`, questo potrebbe mascherare i problemi reali. È meglio aggiornare i certificati:

import requests
import certifi

# Corretto
response = requests.get(
    url,
    proxies=proxies,
    verify=certifi.where(),  # Invece di verify=False
    timeout=15
)

Problemi di rete e timeout

Connection timeout vs Read timeout

La differenza è importante:

  • Connection timeout: il proxy non risponde (problema con il proxy o la rete)
  • Read timeout: il server di destinazione invia i dati lentamente (problema del server di destinazione)
import requests

# timeout = (connection_timeout, read_timeout)
try:
    response = requests.get(
        url,
        proxies=proxies,
        timeout=(5, 15)  # 5 sec per la connessione, 15 per la lettura
    )
except requests.exceptions.ConnectTimeout:
    print("Il proxy non risponde")
except requests.exceptions.ReadTimeout:
    print("Il server di destinazione è lento")

Problemi DNS

Se il server di destinazione non si risolve, non è un errore del proxy:

import socket

# Controlla il DNS senza proxy
try:
    ip = socket.gethostbyname("target-site.com")
    print(f"Si risolve: {ip}")
except socket.gaierror:
    print("Errore DNS — sito non trovato")

Checklist di diagnosi del basso SR

  1. Stabilisci una linea di base: quale SR era normale prima?
  2. Esegui un test isolato (script sopra) con 100 richieste
  3. Controlla i log: quali codici HTTP dominano? (407, 429, 403, timeout?)
  4. Se 407: verifica login/password e whitelist IP
  5. Se 429: aggiungi ritardo tra le richieste, usa rotazione IP
  6. Se 403: verifica User-Agent, Referer, aggiungi intestazioni realistiche
  7. Se timeout: aumenta il timeout, controlla l'RPS, usa logica di retry
  8. Controlla il tuo codice: corretta gestione delle eccezioni, timeout corretti
  9. Controlla il server di destinazione: è accessibile direttamente (senza proxy)?
  10. Se tutto il resto non aiuta: prova un diverso tipo di proxy o un diverso provider

Tabella di diagnosi rapida

Codice HTTP Causa probabile Soluzione
407 Credenziali proxy errate Verifica login/password, whitelist IP
429 Troppe richieste Aggiungi ritardo, usa rotazione IP
403 IP bloccato o rilevatore di bot Aggiungi intestazioni realistiche, usa proxy mobili
Timeout Proxy lento o server di destinazione sovraccarico Aumenta il timeout, controlla l'RPS
Connection refused Server proxy non disponibile Verifica IP:port, stato del proxy

Conclusioni

Un basso success rate è un sintomo, non una malattia. Le cause possono essere molte: da un errore di battitura nel codice al blocco da parte del server di destinazione. La diagnosi sistematica è la chiave per la soluzione:

  1. Controlla le metriche e i log
  2. Isola il problema (proxy vs server di destinazione vs tuo codice)
  3. Determina il tipo di errore (407, 429, 403, timeout)
  4. Applica la soluzione corrispondente

Per compiti che richiedono affidabilità e alto SR, si consigliano proxy residenziali con rotazione IP. Sono più difficili da rilevare e più stabili. Prova il test gratuito su proxycove.com e testa sul tuo compito.