# curl con un Proxy: sintassi -x, autenticazione, SOCKS5 e ricette di debug

Un solo flag instrada curl attraverso qualsiasi proxy — poi l'autenticazione, i tunnel CONNECT, il comportamento DNS di SOCKS5 e le variabili d'ambiente decidono se funziona davvero. Ogni ricetta di cui hai bisogno, pronta da incollare.

Usare curl con un proxy è un solo flag: `-x`. Ma tra quel flag e un comando di scraping funzionante ci sono cinque dettagli che generano la maggior parte del traffico su Stack Overflow sull'argomento — sintassi delle credenziali, tunnel CONNECT, comportamento DNS di SOCKS5, variabili d'ambiente che dirottano silenziosamente le richieste, e codici di errore che sembrano tutti uguali finché non leggi l'output verboso. Questa è la guida completa, copia-incolla: ogni variante di sintassi, ogni metodo di autenticazione, e le ricette che riutilizzerai davvero.

## Il flag -x: sintassi curl proxy

```bash
# route one request through an HTTP proxy
curl -x http://residentialboson.quantumproxies.io:PORT https://ifconfig.me

# identical, long form
curl --proxy http://residentialboson.quantumproxies.io:PORT https://ifconfig.me
```

Due predefiniti che vale la pena conoscere, direttamente dalla documentazione di curl: se ometti lo schema, curl assume un proxy HTTP, e se ometti la porta assume 1080 — una scelta puramente storica che non corrisponde quasi a nessun proxy reale, quindi scrivi sempre esplicitamente la porta. Il prefisso dello schema seleziona il protocollo del proxy: `http://` per un proxy HTTP standard, `https://` per crittografare il passaggio al proxy stesso, `socks5://` o `socks5h://` per SOCKS.

## Autenticazione curl proxy: tre modi per inviare credenziali

```bash
# 1) credentials inline in the proxy URL
curl -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 https://ifconfig.me

# 2) separate flag -- keeps the URL readable
curl -x http://residentialpremium.quantumproxies.io:8080 -U USER:PASS https://ifconfig.me

# 3) special characters must be percent-encoded (p@ss! -> p%40ss%21)
curl -x "http://USER:p%40ss%21@residentialpremium.quantumproxies.io:8080" https://ifconfig.me
```

`-U` (maiuscolo) è l'autenticazione del proxy; `-u` minuscolo autentica contro il sito di destinazione — confonderli è l'errore classico. Un `407 Proxy Authentication Required` significa sempre che il proxy ha rifiutato le tue credenziali, mai la destinazione. Controlla errori di battitura, simboli non codificati, o un provider che si aspetta l'autenticazione tramite whitelist IP invece di user:pass. Con [QuantumProxies residential proxies](https://quantumproxies.io/residential-proxies) entrambi i modelli funzionano — inserisci l'IP della tua macchina nella whitelist e ometti completamente le credenziali, o incorpora user:pass nell'URL. L'intera checklist 407 è disponibile nella [nostra guida alla risoluzione dei problemi 407](https://quantumproxies.io/blog/fix-407-proxy-authentication-required).

![curl -x chiede al proxy CONNECT ifconfig.me:443, il proxy risponde 200 Connection established e curl esegue la stretta di mano TLS con il target attraverso quel tunnel. La scheda: il TLS va da un capo all'altro, il proxy inoltra solo testo cifrato che non può leggere, e qualsiasi risposta diversa da 200 dopo il CONNECT indica il punto del guasto.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335145/blog/generated/qp-b9-006-diag1.png)
*Per obiettivi HTTPS curl chiede al proxy un tunnel CONNECT, quindi esegue TLS end-to-end al suo interno — il proxy inoltra byte che non può leggere.*

## Obiettivi HTTPS e il tunnel CONNECT

Quando l'URL di destinazione è `https://`, curl non chiede al proxy di recuperare la pagina. Invia una richiesta `CONNECT host:443`, il proxy apre un tunnel TCP grezzo, e curl esegue l'handshake TLS direttamente con la destinazione attraverso di esso. Ecco perché un proxy HTTP può trasportare traffico HTTPS senza rompere la crittografia — inoltra testo cifrato che non può leggere o modificare. Nell'output `-v` vedrai la linea `CONNECT` seguita da `200 Connection established`; qualsiasi altra cosa in quel passaggio è il tuo punto di fallimento. Per protocolli non HTTP attraverso un proxy HTTP, `-p` (`--proxytunnel`) forza lo stesso comportamento del tunnel.

## SOCKS5: un carattere cambia dove avviene la risoluzione DNS

```bash
# SOCKS5, hostname resolved on YOUR machine
curl -x socks5://USER:PASS@residentialpremium.quantumproxies.io:1080 https://ifconfig.me

# SOCKS5h, hostname resolved BY THE PROXY -- use this for scraping
curl -x socks5h://USER:PASS@residentialpremium.quantumproxies.io:1080 https://ifconfig.me

# dedicated flag, same as socks5h
curl --socks5-hostname residentialpremium.quantumproxies.io:1080 -U USER:PASS https://ifconfig.me
```

Con `socks5://` semplice, la tua macchina esegue la risoluzione DNS localmente — il nome host di destinazione trapela al tuo resolver locale, e potresti ottenere un IP che non corrisponde geograficamente alla tua uscita. `socks5h://` sposta la risoluzione al proxy, quindi le risposte DNS provengono dalla rete dell'uscita. Ogni [piano QuantumProxies include SOCKS5](https://quantumproxies.io/socks5-proxies) insieme a HTTP sullo stesso gateway. Se non sei sicuro di quale protocollo un dato strumento necessiti, il nostro [confronto tra SOCKS5 e HTTP](https://quantumproxies.io/blog/socks5-vs-http-proxy-difference) lo spiega.

![Due schemi SOCKS5 di curl a confronto: socks5:// risolve il nome host sulla tua macchina, esponendolo al resolver locale e rischiando un'incongruenza geografica, mentre socks5h:// risolve il DNS all'uscita del proxy. La scheda consiglia socks5h:// o --socks5-hostname come impostazione predefinita per lo scraping.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335145/blog/generated/qp-b9-006-diag2.png)
*socks5h:// risolve il DNS all'uscita — nessuna perdita di nome host locale, nessuna discrepanza geografica. Usalo di default per lo scraping.*

## Variabili d'ambiente e .curlrc

```bash
# proxy every curl (and most CLI tools) in this shell
export http_proxy="http://USER:PASS@residentialpremium.quantumproxies.io:8080"
export https_proxy="http://USER:PASS@residentialpremium.quantumproxies.io:8080"
export NO_PROXY="localhost,127.0.0.1,.internal.example"

curl https://ifconfig.me                 # proxied automatically
curl --noproxy "*" https://ifconfig.me   # bypass for one call

# permanent default: add to ~/.curlrc
# proxy = "http://USER:PASS@residentialpremium.quantumproxies.io:8080"
```

Una stranezza documentata nella man page di curl che alla fine colpisce tutti: le variabili possono essere maiuscole o minuscole e le minuscole vincono, tranne `http_proxy`, che curl onora solo in minuscolo — `HTTP_PROXY` è deliberatamente ignorato per motivi di sicurezza. Su Windows la sintassi `-x` è identica in cmd e PowerShell; imposta le variabili con `set http_proxy=...` o `$env:http_proxy="..."`, e il file di configurazione è `%APPDATA%\_curlrc`. Ricorda che queste variabili influenzano anche altri strumenti — un export dimenticato in CI è una classica fonte di traffico misterioso.

## Debugging con -v: leggi l'handshake, non le foglie di tè

Aggiungi `-v` e curl narra l'intera conversazione con il proxy. Abbina ciò che vedi alla causa:

- `Connected to residentialpremium.quantumproxies.io` — hai raggiunto il proxy; qualsiasi fallimento dopo questo è lato autenticazione o destinazione.
- `curl: (7) Failed to connect` — host/porta errati, proxy morto, o un firewall che blocca la porta prima che il proxy risponda.
- `407 Proxy Authentication Required` — credenziali mancanti, errate, o caratteri speciali non codificati nell'URL.
- `curl: (56) CONNECT aborted` — il proxy ha rifiutato il tunnel, di solito perché la porta di destinazione non è consentita (la maggior parte dei proxy consente 443 e poco altro).
- Il tunnel si apre ma il sito restituisce 403 — è la destinazione che ti blocca, non il proxy; testa l'uscita con il [controllo qualità IP gratuito](https://quantumproxies.io/ip-checker) e vedi [perché curl ottiene 403 mentre un browser passa](https://quantumproxies.io/blog/curl-403-but-browser-works).

## Testa il proxy prima di fidarti

Due controlli di trenta secondi risparmiano ore di debugging confuso in seguito. Primo, conferma l'anonimato: accedi a `https://httpbin.org/headers` attraverso il proxy e ispeziona ciò che la destinazione riceve effettivamente — un gateway pulito non aggiunge intestazioni `Via` o `X-Forwarded-For` che pubblicizzerebbero il proxy, mentre i proxy economici o gratuiti spesso iniettano entrambi. Secondo, misura il sovraccarico con le variabili di temporizzazione `-w` (ricetta sotto): un passaggio residenziale aggiunge tipicamente alcune centinaia di millisecondi rispetto a una richiesta diretta, il che è normale; tempi di connessione di diversi secondi significano un'uscita congestionata da cui vale la pena ruotare. Integra entrambi i controlli in CI per qualsiasi pipeline che dipenda dai proxy, e catturerai un endpoint mal configurato prima che bruci silenziosamente un ciclo di scraping — o il tuo budget di larghezza di banda, poiché le fatture di utilizzo sono per GB indipendentemente dal fatto che le risposte siano state utili o meno.

## Ricette rapide

```bash
# confirm the exit IP
curl -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 https://ifconfig.me

# geo-target: choose the exit country in the username
curl -x "http://USER-country-de:PASS@residentialpremium.quantumproxies.io:8080" https://ifconfig.me

# sticky session: keep the same exit IP across calls
curl -x "http://USER-sid-a1b2c3-ttl-30m:PASS@residentialpremium.quantumproxies.io:8080" https://example.com

# POST JSON through the proxy
curl -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 \
  -H "Content-Type: application/json" -d '{"q":"test"}' https://httpbin.org/post

# fetch a page: follow redirects, browser UA, save to file
curl -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 -L -A "Mozilla/5.0" \
  -o page.html https://example.com

# measure the proxy overhead
curl -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 -s -o /dev/null \
  -w "connect: %{time_connect}s  total: %{time_total}s\n" https://example.com
```

I trucchi con il suffisso del nome utente funzionano perché il gateway analizza il targeting dalle credenziali: selezione del paese in oltre 200 località, rotazione per richiesta per impostazione predefinita, sessioni sticky quando un flusso necessita di un'identità. Quando i tuoi one-liner crescono in uno script, lo stesso endpoint si inserisce direttamente in Python — la nostra [guida ai proxy Python Requests](https://quantumproxies.io/blog/python-requests-proxy-guide) riprende esattamente dove curl lascia.

## Domande frequenti

### Come uso un proxy SOCKS5 con curl?

Passalo a `-x` con uno schema SOCKS: `curl -x socks5h://user:pass@host:port https://target`. Preferisci `socks5h://` a `socks5://` così il DNS viene risolto sul proxy piuttosto che sulla tua macchina. I vecchi flag `--socks5` e `--socks5-hostname` funzionano ancora e fanno la stessa cosa.

### Come faccio a far ignorare il proxy a curl?

Per una richiesta, aggiungi `--noproxy "*"`. Per una shell, disimposta `http_proxy` e `https_proxy`. Per esentare specifici host in modo permanente, elencali in `NO_PROXY` come domini separati da virgole. Se curl sta usando un proxy quando non glielo hai mai chiesto, una variabile d'ambiente o una riga in `~/.curlrc` è quasi certamente il colpevole.

### Perché curl restituisce 407 Proxy Authentication Required?

Il proxy ha rifiutato le tue credenziali. Verifica utente e password, conferma di aver usato `-U` (non `-u`, che è per il sito), e codifica in percentuale caratteri speciali come `@` o `!`. Se il tuo provider autentica tramite whitelist IP, autorizza l'IP della tua macchina nel dashboard e non inviare alcuna credenziale.

### La sintassi del proxy curl funziona su Windows?

Sì — `-x`, `-U` e gli schemi SOCKS sono identici, poiché curl è incluso con Windows 10 e versioni successive. Solo l'ambiente differisce: imposta le variabili con `set` in cmd o `$env:` in PowerShell, e usa `%APPDATA%\_curlrc` invece di `~/.curlrc` per impostazioni permanenti.

### Come imposto un proxy permanente per curl?

Aggiungi una riga `proxy = "http://user:pass@host:port"` a `~/.curlrc` (o `_curlrc` su Windows) e ogni invocazione di curl lo utilizzerà. In alternativa, esporta `http_proxy` e `https_proxy` dal tuo profilo shell per coprire anche altri strumenti. La linea di comando `-x` sovrascrive sempre entrambi, quindi le eccezioni una tantum rimangono facili.

Questa è l'intera superficie: `-x` più uno schema, credenziali correttamente codificate, `socks5h` quando usi SOCKS, variabili d'ambiente che imposti deliberatamente, e `-v` ogni volta che qualcosa si comporta male. I comandi sopra funzionano così come sono contro qualsiasi gateway — abbinali a uscite residenziali pulite e curl diventa uno strumento di scraping veramente capace.

[Testa queste ricette su QuantumProxies residential proxies](https://quantumproxies.io/residential-proxies)
