In this Article
cURL è uno strumento da riga di comando che ogni sviluppatore utilizza prima o poi. Non richiede molte risorse e in genere è incluso per impostazione predefinita nella maggior parte dei sistemi operativi. Tuttavia, una volta che inizi a utilizzarlo per attività più avanzate, come web scraping, aggiramento delle restrizioni regionali o test di API da più posizioni, potresti riscontrare problemi come limiti di velocità o contenuti inaccessibili.
Quando invii le tue richieste cURL tramite un server proxy, puoi modificare l’indirizzo IP rilevato dal sito Web di destinazione. Con cURL puoi raccogliere dati globali, accedere a contenuti limitati per regione ed evitare blocchi che si verificano quando invii troppe richieste da un singolo indirizzo IP. Questa guida spiega come utilizzare cURL con un proxy, inclusa la sintassi necessaria, i metodi di autenticazione e gli scenari specifici in cui questo approccio è vantaggioso.
Fatti chiave
- cURL supporta i proxy tramite flag della riga di comando, variabili di ambiente o file di configurazione
- Esistono diversi tipi di proxy, inclusi residenziale, mobile e data center
- I proxy vengono utilizzati per scaping estesi, test API, superamento di divieti e risultati geo-specifici
- Per ottenere i migliori risultati, abbina il tipo di proxy corretto alla configurazione appropriata per il tuo caso d’uso specifico
- Ci sono sessioni fisse e rotanti. Le sessioni permanenti vengono utilizzate per gli accessi e le attività con stato, mentre le sessioni a rotazione vengono utilizzate per le attività di scraping
Cos’è cURL e come funziona
Rilasciato nel 1996, cURL sta per Client e URL. È un meccanismo importante per l’invio di richieste HTTP e il trasferimento di dati. cURL viene utilizzato tramite la riga di comando, il che significa che si digita un comando in un terminale, invia la richiesta e stampa la risposta.
cURL funziona su libcurl, una libreria C portatile. Il processo in sé è abbastanza semplice. Ecco cosa succede quando digiti un comando:
- Analizza l’URL: cURL lo scompone in protocollo, host, porta e percorso.
- Apri una connessione con l’host.
- Invia la richiesta: una riga di richiesta, alcune intestazioni e un corpo facoltativo.
- Ricevi la risposta: il server restituisce intestazioni e corpo.
- Stampa il risultato finale sul terminale.
cURL è universale. Testare endpoint, recuperare pagine, utilizzare API, raccogliere dati: queste sono solo una piccola parte delle attività per cui viene utilizzato cURL. Può gestire cookie, intestazioni personalizzate, tentativi e autenticazione. Supporta anche la configurazione proxy. Quando qualcosa si rompe tra la tua app e un server, arricciare – v spesso espone i dettagli della richiesta e della risposta per facilitare il debug. Esploreremo questo metodo più approfonditamente nei prossimi capitoli.
Cos’è un proxy in cURL
Il proxy cURL media la connessione tra il client e il server di destinazione. Funziona come un livello di inoltro che instrada le richieste HTTP o HTTPS. La normale connessione senza proxy è composta da due elementi: il client e la destinazione. In una configurazione proxy, il proxy funge da punto terminale per la sessione client e ristabilisce la connessione verso la destinazione.
cURL invia prima la richiesta completa al server proxy invece di collegarla direttamente alla destinazione. Quindi, il proxy esegue la risoluzione DNS per convertire il nome di dominio in un indirizzo IP, apre un nuovo socket e quindi inoltra la richiesta con le sue intestazioni e il suo corpo. I proxy nascondono il tuo IP originale, filtrano il traffico, rendono la tua navigazione privata e ti consentono di accedere alla destinazione da un’altra posizione. Il traffico HTTP viene elaborato come semplici dati dell’applicazione, quindi i proxy possono gestire il contenuto della richiesta. HTTPS funziona diversamente. In questo caso, cURL invia un comando CONNECT per stabilire un tunnel in modo che i dati TLS crittografati passino senza essere decrittografati.
Quando è necessario utilizzare cURL con un proxy
cURL di per sé è già potente, ma raramente viene utilizzato da solo negli ambienti di produzione. I team in genere combinano cURL con un server proxy affidabile. Ecco quattro casi d’uso in cui questa configurazione è molto utile.
- Web scraping esteso
Molti team di e-commerce devono monitorare quotidianamente i prezzi della concorrenza su numerose pagine di prodotto. Scrivere uno scraper pulito basato su cURL non è sufficiente, poiché entro venti minuti le richieste tendono solitamente a fallire. In questa situazione, instradare cURL attraverso un pool di proxy rotanti può essere di grande aiuto. Ogni richiesta arriverà da un altro IP e il sito web di destinazione non limiterà l’attività, poiché assomiglia a un comportamento naturale.
- Superare i divieti IP
Le attività settimanali richiedono un accesso stabile a dati accurati. Ad esempio, se il tuo processo di controllo settimanale non è supportato da proxy, probabilmente dovrai affrontare errori 403. Anche il passaggio a una rete diversa non sempre aiuta. Questa volta, prova a inviare la stessa richiesta cURL tramite un proxy residenziale per simulare il comportamento autentico dell’utente da una tipica connessione Internet domestica.
- Generazione di richieste con targeting geografico
La tua posizione influisce sui contenuti che vedi. I team di marketing di solito devono verificare se le pagine di destinazione localizzate di un cliente sono state visualizzate correttamente. Dalla propria connessione, le pagine potrebbero non caricarsi nelle versioni di cui hanno bisogno. La soluzione sta implementando IP residenziali di provenienza etica da un fornitore affidabile come DataImpulse. Una volta configurata dal tuo team, ogni richiesta restituirà la pagina esattamente come la vedrebbe un utente locale, inclusi i prezzi locali ed eventuali promozioni specifiche per area geografica.
- Test API globale
Nell’ambito delle loro attività, gli sviluppatori potrebbero avere difficoltà a verificare il comportamento delle API in varie posizioni senza strumenti adeguati. Le applicazioni di monitoraggio non sempre rilevano il problema e riprodurle in un ambiente locale diventa impossibile. Risolvi il problema inviando richieste cURL alla tua API tramite un proxy. Raggiungerai gli stessi nodi periferici, lo stesso database regionale e gli stessi percorsi di rete utilizzati dai tuoi utenti. I proxy ti aiutano a risolvere i problemi che sono sfuggiti ai tuoi strumenti di monitoraggio.
Cosa ti serve per utilizzare un proxy con cURL
Usare un proxy con cURL non richiede molto. Avrai bisogno di cinque cose per iniziare.
- cURL, installato e pronto per l’uso. È disponibile per impostazione predefinita sulla maggior parte dei sistemi macOS e Linux. Il nostro tutorial per principianti mostra come installare cURL su qualsiasi sistema operativo, incluso Windows.
- Accesso a un endpoint proxy. Può essere un proxy HTTP, HTTPS o SOCKS5. Questo è ciò che fornisce alle richieste cURL un altro percorso verso la destinazione invece di andare direttamente.
- Credenziali proxy se è richiesta l’autenticazione.
- Endpoint di destinazione. Può essere un’API, un sito Web o qualunque cosa tu stia cercando di raggiungere.
- Strumento di controllo proxy. Per verificare che il traffico passi attraverso un proxy, utilizza un servizio rapido come https://ipinfo.io/ o https://whatismyipaddress.com/.
Una volta posizionati questi elementi, possiamo configurare le impostazioni del proxy cURL, con il routing gestito a livello di rete. Invece di contattare direttamente il target, cURL utilizza il proxy come intermediario.
Come utilizzare cURL con proxy: passo dopo passo
Comando proxy cURL di base
Per instradare una richiesta cURL tramite un proxy, utilizzare il file -X flag per specificare il server proxy. cURL invierà la richiesta tramite quel proxy.
curl -x http://proxy-ip:port https://example.com
È la forma più semplice di utilizzo del proxy e funziona per richieste HTTP o HTTPS di base che non richiedono l’autenticazione.
Proxy cURL con autenticazione
Se il proxy richiede passaggi di autenticazione aggiuntivi, puoi passare il nome utente e la password direttamente nella stringa del proxy. Ecco come fare:
curl -x http://username:password@proxy-ip:port https://example.com
I comandi cURL si basano su queste credenziali per l’autenticazione con il proxy prima di passare la richiesta.
Utilizzo del proxy HTTPS
Con un proxy HTTPS, cURL instrada comunque il traffico attraverso il proxy assicurandosi che la crittografia TLS venga mantenuta fino alla destinazione.
curl -x https://proxy-ip:port https://example.com
Questa configurazione è utile quando è necessario crittografare il collegamento al proxy stesso.
Utilizzo del proxy SOCKS5
I proxy SOCKS5 inoltrano il traffico senza toccare i dati della richiesta.
curl -x socks5://proxy-ip:port https://example.com
Poiché SOCKS5 gestisce più tipi di traffico, questi proxy rappresentano una scelta flessibile per gli ingegneri che lavorano con protocolli diversi.
Configurazione proxy avanzata in cURL
Utilizzo delle variabili d’ambiente
cURL può raccogliere automaticamente le impostazioni proxy dalle variabili di ambiente a livello di sistema. Ciò è utile quando si desidera che ogni richiesta proveniente da una sessione terminale o da un’applicazione passi attraverso lo stesso proxy, senza doverlo specificare ogni volta.
export HTTP_PROXY=http://proxy-ip:port
export HTTPS_PROXY=http://proxy-ip:port
Una volta impostate queste variabili, cURL le applica autonomamente alle richieste in uscita, in base al protocollo che stai utilizzando.
Utilizzando il file .curlrc
IL .curlrc il file di configurazione viene utilizzato per le impostazioni cURL persistenti. Aggiungi le tue impostazioni proxy una volta e ogni richiesta verrà instradata automaticamente attraverso quel proxy. Sostituirlo dalla riga di comando ogni volta che è necessaria un’altra configurazione.
proxy=http://proxy-ip:port
Impostazione del proxy per richiesta rispetto a quello globale
cURL ti offre due modi per definire un proxy: per richiesta, utilizzando un flag, o globalmente, utilizzando variabili di ambiente o un file di configurazione. La maggior parte degli sviluppatori solitamente combina entrambi questi metodi.
La configurazione per richiesta utilizza il file -X flag sulla riga di comando. È l’approccio più reattivo perché puoi controllare esattamente quale richiesta passa attraverso quale proxy. Questo è ciò che desideri quando esegui il debug, confronti le risposte tra regioni o esegui comandi ad hoc in cui ogni chiamata potrebbe richiedere una configurazione separata. Ecco l’esempio fornito:
curl -x http://proxy.example.com:8080 https://api.example.com
La configurazione globale sposta il proxy fuori dalla riga di comando e nel tuo ambiente, tramite variabili come HTTP_PROXY e HTTPS_PROXY o un .curlrc file. Una volta configurato, cURL instrada ogni richiesta in uscita attraverso lo stesso proxy finché non lo cambi. Questa è un’ottima scelta per script lunghi, pipeline CI/CD, lavori pianificati, ovunque -X su ogni riga ci sarebbe solo ripetizione. Imposta questo comando:
export HTTPS_PROXY=http://proxy.example.com:8080
curl https://api.example.com
Ignorare il proxy per richieste specifiche
Un proxy globale è conveniente. Tuttavia, non è sempre quello che vuoi. Le API interne, i servizi localhost e gli endpoint dei metadati cloud in genere devono ignorare completamente il proxy. Instradarli può rallentare le richieste nella migliore delle ipotesi o bloccare completamente la connessione nella peggiore.
cURL ti offre tre modi per gestirlo:
1. –noproxy “*” . Significa ignorare il proxy per questa richiesta, indipendentemente dalla destinazione.
curl --noproxy "*" https://localhost:8000
2. –noproxy “host1,host2”. Questo significa bypassare solo per gli host elencati.
curl --noproxy "localhost,*.internal" https://api.internal/status
3. NO_PROXY variabile d’ambiente. Imposta un elenco permanente di host che saltano sempre il proxy, anche quando è configurato un proxy globale.
export NO_PROXY="localhost,127.0.0.1,*.internal,metadata.google.internal"
Dopo aver impostato NO_PROXY, cURL instrada tutto ciò che corrisponde direttamente all’elenco, mentre tutto il resto scorre ancora attraverso il proxy.
Utilizzo di cURL con proxy rotanti
Un IP non è sufficiente se vuoi inviare centinaia di richieste. Anche i proxy residenziali hanno una tariffa limitata se ogni richiesta proviene dallo stesso indirizzo. La soluzione è la rotazione, che consiste nel distribuire tutte le richieste su molti IP diversi in modo che nessuno attiri inutili attenzioni. Il provider può farlo per te oppure puoi ruotare manualmente i proxy.
1. Rotazione del gateway
Molti fornitori di proxy offrono un singolo endpoint che ruota sistematicamente gli IP. L’utente in genere si connette a un indirizzo e quindi le richieste passano attraverso un IP diverso dal pool del provider.
curl -x http://gw.dataimpulse.com:823 \
-U "username:password" \
https://httpbin.org/ip
2. Rotazione manuale
Gli utenti a volte hanno il proprio elenco di proxy, quindi li ruotano manualmente all’interno dello script. Ecco l’esempio in Python:
import random
import subprocess
proxies = [
"http://user:[email protected]:8080",
"http://user:[email protected]:8080",
"http://user:[email protected]:8080",
]
with open("urls.txt") as f:
for url in f:
proxy = random.choice(proxies)
subprocess.run(["curl", "-x", proxy, url.strip()])
Perché la rotazione è importante
Limiti di velocità, CAPTCHA, blocchi IP, divieti rigidi, errori e molti altri problemi possono verificarsi se un IP viene utilizzato troppo spesso. Distribuendo le richieste su vari IP, nessun indirizzo appare sospetto al bersaglio. Sembra un traffico normale proveniente da molti visitatori diversi. Questo è il motivo principale per utilizzare una rotazione proxy: non sembrare un client automatizzato.
Esempio con endpoint proxy rotante
Ecco l’esempio base di un proxy rotante con cURL. Dopo aver eseguito questo comando tre volte di seguito, otterrai tre risultati diversi.
curl -x http://gw.dataimpulse.com:823 \
-U "username:password" \
https://httpbin.org/ip
httpbin.org/ip è un utile endpoint di verifica, poiché restituisce l’IP di origine osservato dal server.
Appiccicoso o rotante Sessioni
Nella modalità rotativa ogni richiesta è indipendente. Passa attraverso un IP diverso dal pool del provider. Questa è la scelta giusta se sei un web scraper e hai bisogno di raccogliere molti dati su prezzi e prodotti. Se un singolo indirizzo continua a essere rilevato, la rotazione a uno nuovo mantiene le tue richieste al sicuro.
Nella modalità permanente, lo stesso indirizzo IP viene mantenuto per un certo periodo. Di solito dura dai 5 ai 60 minuti. Funziona bene se lavori con accessi o autenticazione e hai bisogno della coerenza IP per comportarti come farebbe un utente reale.
I migliori tipi di proxy per cURL
cURL funziona allo stesso modo, indipendentemente dal tipo di proxy a cui lo punti. Il processo richiede di impostare il flag -x, passare le credenziali e inviare la richiesta. Ciò che cambia è il modo in cui il server di destinazione percepisce il tuo traffico, e questo è quasi completamente determinato dal tipo di IP dietro il proxy.
I am raw html block.
Click edit button to change this html
Errori comuni e come risolverli
1. Connessione proxy rifiutata
Quando un cURL non riesce ad aprire una connessione TCP al proxy, probabilmente riceverai il messaggio che la connessione è stata negata. Significa che il proxy è irraggiungibile o bloccato. I passaggi utili includono il controllo del firewall e delle impostazioni del proxy, inclusi host e porta. Testare il proxy utilizzando questo comando:
curl -v -x http://proxy.example.com:8080 https://httpbin.org/ip
2. Autenticazione non riuscita
In genere viene visualizzato come errore 407 e significa che il proxy ha rifiutato le tue credenziali. Ricontrolla nome utente, password, host e porta. Non incorporare credenziali negli URL e utilizzare invece il flag -U. Per esempio:
curl -x http://proxy.example.com:8080 -U "user:pass" https://httpbin.org/ip
3. Errori SSL/certificato
Gli errori in questo caso provengono solitamente da un archivio certificati CA obsoleto, da un proxy che intercetta il traffico TLS o dal sito di destinazione con il certificato sbagliato. In questo caso, aggiorna il tuo bundle CA, utilizza -k solo per i test e controlla se il proxy stesso sta decrittografando il traffico.
4. Problemi di timeout
Ciò accade perché il server può essere sovraccarico o il proxy potrebbe funzionare lentamente. Puoi risolverlo impostando timeout espliciti come mostra questo esempio di codice:
curl --connect-timeout 10 --max-time 30 \
-x http://proxy.example.com:8080 https://target.com
Quando il messaggio di errore da solo non è sufficiente per capire dove si trova l’errore, la modalità dettagliata è lo strumento più utile nel toolkit di debug di cURL. Stampa l’intera sequenza di connessione in modo da poter vedere esattamente quale passaggio è riuscito e quale si è interrotto.
curl -v -x http://proxy.example.com:8080 \
-U "username:password" \
https://httpbin.org/ip
Best practice per il proxy cURL
Ecco alcune abitudini utili da imparare.
- Ruota gli IP per impostazione predefinita, fissati solo quando necessario
- Limita il tasso di richiesta in modo che il traffico appaia naturale
- Combina proxy con intestazioni personalizzate
- Utilizzare –compressed per ridurre le dimensioni di trasferimento del 70–80%
- Salta i proxy gratuiti
*Il flag –compressed indica a cURL di inviare Accept-Encoding: gzip, deflate, br e decomprimere tutto ciò che ritorna.
curl --compressed \
-x http://gw.dataimpulse.com:823 \
-U "user:pass" \
https://target.com
Esempi di proxy cURL per casi d’uso reali
Diamo un’occhiata a tre scenari comuni di utilizzo di cURL in combinazione con un proxy.
1. Raschiare un sito web
Questa configurazione verrà eseguita su migliaia di pagine e produrrà un output pulito pronto per l’analisi. Include proxy residenziali a rotazione, intestazioni personalizzate che corrispondono a un browser reale, compressione per trasferimenti più rapidi e un piccolo ritardo tra le richieste.
Ecco un esempio che funzionerà su Linux, macOS e WSL. Avrai bisogno di un file urls.txt con i dettagli dominio.com, come google.com o esempio.com.
Codice:
while IFS= read -r url || [ -n "$url" ]; do
[ -z "$url" ] && continue
full_url="$url"
case "$full_url" in
http://|https://) ;;
*) full_url="https://$full_url" ;;
esac
file="$(printf '%s' "$url" | tr c 'A-Za-z0-9.' '').html"
curl -sS --compressed \
--connect-timeout 10 --max-time 30 \
--retry 3 --retry-delay 2 \
-x http://gw.dataimpulse.com:823 \
-U "cb8311cff693a2dd991b:f82b649bce34b0c7" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
-H "Accept: text/html,application/xhtml+xml" \
-H "Accept-Language: en-US,en;q=0.9" \
"$full_url" -o "$file" \
-w "$url -> HTTP %{http_code}, saved to $file\n" &
done < urls.txt
wait
2. Accesso a contenuti con limitazioni geografiche
In questo codice, ogni richiesta arriva al sito di destinazione come se provenisse da un utente reale in quel Paese. I file di output catturano la versione localizzata esattamente come la vedrebbe un visitatore locale.
# Check the Brazilian version
curl -x http://gw.dataimpulse.com:823 \
-U "username__cr.br:password" \
-H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" \
https://client.com/landing -o br.html
# Check the Japanese version
curl -x http://gw.dataimpulse.com:823 \
-U "username__cr.jp:password" \
-H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" \
https://client.com/landing -o jp.html
# Check the German version
curl -x http://gw.dataimpulse.com:823 \
-U "username__cr.de:password" \
-H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" \
https://client.com/landing -o de.html
3. Testare le API
Da qui, il team può approfondire il routing dei database regionali, i nodi edge della CDN o qualsiasi altra cosa differisca tra le due posizioni.
curl -o /dev/null -s \
-x http://gw.dataimpulse.com:823 \
-U "username__cr.sg:password" \
-w "DNS: %{time_namelookup}s | Connect: %{time_connect}s | TLS: %{time_appconnect}s | TTFB: %{time_starttransfer}s | Total: %{time_total}s\n" \
https://api.client.com/v1/users/me
Domande frequenti
Come utilizzare curl con proxy?
Utilizzare il flag -x per specificare l'indirizzo proxy e la porta DataImpulse. Se il proxy richiede l'autenticazione, aggiungi -U "nome utente:password" per passare le tue credenziali.
L'autenticazione proxy Curl non funziona
La causa più comune sono credenziali errate o caratteri speciali nella password: utilizza il flag -U "utente:pass" invece di incorporare le credenziali nell'URL e codifica nell'URL qualsiasi carattere @, : o /.
Calzini arricciati vs proxy http
Il proxy HTTP gestisce solo il traffico HTTP e HTTPS, mentre un proxy SOCKS5 inoltra tutto il traffico TCP senza ispezionare la richiesta. Utilizza i proxy HTTP DataImpulse per il web scraping e le chiamate API; usa SOCKS5 quando hai bisogno di flessibilità del protocollo o di routing di livello inferiore.
Come ruotare i proxy in curl
Connettiti a un endpoint e il provider assegna automaticamente un IP diverso per richiesta. Per la rotazione manuale, memorizza un elenco di proxy in uno script e scegline uno casuale per ogni richiesta.
Conclusione
cURL con proxy è una di quelle combinazioni indispensabili per qualsiasi sviluppatore o per chiunque desideri un processo di raccolta dati sicuro e accurato. Un singolo strumento da riga di comando, un singolo flag e all’improvviso puoi eseguire operazioni su larga scala, automatizzare i test tra regioni e accedere alle API da qualsiasi parte del mondo. È compatto, programmabile e funziona allo stesso modo su ogni sistema su cui verrà distribuito.
La configurazione gioca un ruolo enorme. Selezionando il tipo di proxy giusto, che sia residenziale, datacenter o mobile, per il tuo target. Rotazione degli IP al ritmo giusto. Invio di intestazioni HTTP con cURL che sembra un vero browser, non uno script. Integra tentativi, timeout e limiti di velocità prima che ne abbiano effettivamente bisogno. Completa questi passaggi e cURL diventerà una spina dorsale affidabile per i flussi di lavoro dei dati di produzione.
