Risposta rapida
Come uso un proxy con curl?
Usa curl -x http://USERNAME:[email protected]:7777 https://api.ipify.org per il proxy HTTP, o --socks5-hostname gw.crawlrelay.com:7778 con -U USERNAME:PASSWORD per SOCKS5. CrawlRelay proxy residenziali prendono il paese e una sessione sticky nell'username, ad esempio USERNAME-country-de-session-t1-ttl-10. A partire da 0,50 USD/GB. Pagati in crypto, senza KYC.
Flag curl necessari
-x / --proxy | URL del proxy: http://host:port, credenziali opzionali all'interno |
|---|---|
-U / --proxy-user | Credenziali proxy come USERNAME:PASSWORD, tenute fuori dall'URL |
--socks5-hostname | Proxy SOCKS5 con DNS risolto all'uscita |
-v | Mostra lo scambio CONNECT e la linea di stato del proxy |
-w | Stampa i tempi, la dimensione e %{http_connect}, lo stato CONNECT del proxy |
--max-time, --connect-timeout | Limiti totali e di connessione, in secondi |
Quali sono i comandi base per i proxy?
Ognuno di questi stampa l'IP di uscita che il sito web vede.
# Rotating exit, any country
curl -x http://gw.crawlrelay.com:7777 -U USERNAME:PASSWORD https://api.ipify.org
# Country and city (city availability varies)
curl -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us-city-chicago:PASSWORD https://api.ipify.org
# Sticky: run it twice, the IP stays the same for up to 10 minutes (it can change earlier)
curl -x http://gw.crawlrelay.com:7777 -U USERNAME-country-de-session-t1-ttl-10:PASSWORD https://api.ipify.org
# SOCKS5, DNS resolved at the exit
curl --socks5-hostname gw.crawlrelay.com:7778 -U USERNAME-country-gb:PASSWORD https://api.ipify.orgCome faccio a fare il debug di una connessione proxy con curl?
Esegui con -v e leggi le righe intorno a CONNECT. Un tunnel funzionante mostra HTTP/1.1 200 Connection established, poi il handshake TLS con il sito web. Qualsiasi altro stato su quella riga arriva dal proxy: 407 significa credenziali, 502 o 504 indicano problemi all'uscita o al target. Il formato -w qui sotto stampa le stesse informazioni in una riga, comodo per cicli e controlli CI.
# Full exchange, including the proxy's answer to CONNECT
curl -v -x http://gw.crawlrelay.com:7777 -U USERNAME:PASSWORD https://example.com/ -o /dev/null
# One line: proxy CONNECT status, HTTP status, compressed bytes and timings
curl -s --compressed -o /dev/null -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us:PASSWORD \
-w 'connect=%{http_connect} http=%{http_code} bytes=%{size_download} tcp=%{time_connect}s tls=%{time_appconnect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n' \
https://example.com/Come faccio a verificare che la rotazione e le sessioni funzionino?
Richiedi l'IP più volte. Senza un ID sessione, ogni esecuzione è una nuova connessione e solitamente mostra un IP diverso. Con un ID sessione, l'IP dovrebbe rimanere lo stesso fino alla scadenza del TTL, anche se può cambiare prima.
echo "rotating:"
for i in 1 2 3 4 5; do
curl -s -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us:PASSWORD https://api.ipify.org; echo
done
echo "sticky:"
for i in 1 2 3 4 5; do
curl -s -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us-session-loop1-ttl-5:PASSWORD https://api.ipify.org; echo
doneCome uso curl con un proxy su Windows?
Chiama curl.exe, non curl. In Windows PowerShell 5.1, curl è un alias di Invoke-WebRequest, che non supporta -x o -U. Windows 10 e 11 includono il vero curl come curl.exe. In PowerShell, metti tra virgolette gli argomenti con caratteri speciali, e scrivi letteralmente $ in una password racchiusa tra apici singoli.
curl.exe -x http://gw.crawlrelay.com:7777 -U 'USERNAME-country-fr:PASSWORD' https://api.ipify.orgCome imposto il proxy una volta per ogni comando?
curl legge le variabili d'ambiente https_proxy e http_proxy, e molti altri strumenti le leggono. Impostale per la sessione shell, e usa NO_PROXY per gli host che non devono passare dal proxy, come la tua API. Evita di mettere la password in variabili esportate a ogni processo figlio su macchine condivise.
export https_proxy="http://USERNAME-country-us:[email protected]:7777"
export http_proxy="$https_proxy"
export NO_PROXY="localhost,127.0.0.1,.internal.example"
curl https://api.ipify.org # now uses the proxy
unset https_proxy http_proxy # back to directcurl e proxy: domande
Qual è la differenza tra --socks5 e --socks5-hostname?
Con --socks5, curl risolve il nome host localmente e manda l'IP al proxy. Con --socks5-hostname, manda il nome host e il proxy risolve da solo. Usa --socks5-hostname per scraping in modo che la risposta DNS corrisponda al paese di uscita, e così il tuo resolver locale non vede i domini che richiedi.
Perché curl dice 'CONNECT tunnel failed, response 407'?
Il proxy ha respinto le credenziali o non le ha ricevute. Controlla username e password, e codifica URL i caratteri speciali se sono nell'URL -x, oppure passali con -U. La pagina 407 elenca le altre cause.
Come vedo quanti byte costa una pagina passando dal proxy?
Aggiungi --compressed -o /dev/null -w '%{size_download}\n'. --compressed fa sì che curl chieda gzip o brotli come fa il tuo scraper, e %{size_download} conta i byte compressi transitati. Senza questo, il server invia la pagina non compressa e la cifra può essere molto più alta. Provalo su alcune pagine reali per stimare il traffico per 1.000 pagine.
curl può usare HTTP/2 o HTTP/3 attraverso il proxy?
HTTP/2 funziona dentro il tunnel CONNECT quando il sito lo supporta, perché il tunnel porta TLS end to end. HTTP/3 usa UDP, che un tunnel CONNECT via proxy HTTP non trasporta, quindi usa HTTP/2 o HTTP/1.1 tramite il gateway.
Testa i tuoi target da linea di comando
1,50 USD per 1 GB, sufficiente per migliaia di test con curl.