eseguire richieste HTTP con cURL (usando PROXY)


451

Ho questo indirizzo proxy: 125.119.175.48:8909

Come posso eseguire una richiesta HTTP usando cURL come curl http://www.example.com, ma specificando l'indirizzo proxy della mia rete?

Risposte:


411

Modo generale:

export http_proxy=http://your.proxy.server:port/

Quindi è possibile connettersi tramite proxy da (molte) applicazioni.

E, come da commento sotto, per https:

export https_proxy=https://your.proxy.server:port/

76
Quando è necessario eseguire il proxy del traffico HTTPS, la variabile di ambiente è in maiuscolo: HTTPS_PROXY
phatblat

18
Dalle pagine man Le variabili d'ambiente possono essere specificate in minuscolo o maiuscolo. La versione in minuscolo ha la precedenza. http_proxy è un'eccezione in quanto è disponibile solo in minuscolo. L'uso di una variabile d'ambiente per impostare il proxy ha lo stesso effetto dell'opzione --proxy.
Capitano Lepton,

@BipinVayalu, cosa vuoi controllare? In questo modo, quello che descrivo sopra, il client usa il proxy "direct way", non in modo trasparente. Pertanto, il proxy fornisce le risposte HTTP standard (inclusi i codici HTTP). Se si esporta una variabile di ambiente http_proxy errata (ad es. Porta errata ...), il client non è in grado di connettersi a questo e viene visualizzato un messaggio di errore: "Avviso! Impossibile connettersi all'host remoto!" O qualcosa di simile - provalo :)
trasmesso

15
Se controlli il codice sorgente di arricciatura, vedrai su url.c (riga 4337 nella versione 7.39) che controllano la versione in minuscolo e se non riescono a trovarlo, controlla in maiuscolo.
Raistmaj,

1
La maggior parte degli utenti mi ha inviato una correzione, ora la condivido. Se si desidera utilizzare la connessione HTTPS tramite proxy, è necessario procedere come segue: esportare https_proxy = your.proxy.server: porta Si noti che è presente un protocollo "http" nello schema URL, non httpS!
onda il

662

Da man curl:

-x, --proxy <[protocol://][user:password@]proxyhost[:port]>

     Use the specified HTTP proxy. 
     If the port number is not specified, it is assumed at port 1080.

curl: (7) impossibile connettersi all'host curl: (7) impossibile connettersi all'host
user873286

Ottengo sopra l'errore quando eseguo questo comando: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286

61
"-x, --proxy" significa che è possibile utilizzare uno dei due. Il comando dovrebbe essere "curl -x 122.72.2.200:80 mysite.com/test.php?id=1 " o "curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1 "
IBBoard

8
I documenti sono correttamente citati come sopra, tuttavia, l'utente e la password devono essere espressi in modo diverso:-x user:password@proxyhost:port
Ed Chapel

Grazie per la migliore risposta!
haotang

128

Le soluzioni di cui sopra potrebbero non funzionare con alcune versioni di arricciatura che le ho provate io stesso (arricciatura 7.22.0). Ma ciò che ha funzionato per me è stato:

curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url

Spero che risolva meglio il problema!


Incontrare lo stesso problema, il ricciolo spedito da Debian Wheezy non supporta ancora il trucco env
hyperknot

Ottenuto questo invece[1] 4812
Aminah Nuraini,

80

Attenzione, se si utilizza un proxy SOCKS, anziché un proxy HTTP / HTTPS, sarà necessario utilizzare l' --socks5opzione invece:

curl --socks5 125.119.175.48:8909 http://example.com/

È inoltre possibile utilizzare --socks5-hostnameinvece di --socks5risolvere DNS sul lato proxy.


6
Questo non ha funzionato per me, ma usando ha --socks5-hostnamefatto.
Michał Rybak,

2
@ MichałRybak che funzionerà allo stesso modo ma risolverà il DNS sul lato proxy. Vedi la pagina man per maggiori dettagli.
Filipe Correia,

3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339sembra funzionare bene per me. L' --proxyopzione è in qualche modo inferiore rispetto --socks5all'utilizzo dei proxy socks5?

@ user993683 Dipende dalla versione. --proxyè probabilmente quello che vuoi, ora, ma non è sempre stato supportato. Si noti inoltre che socks5://ed socks5h://eseguire la risoluzione del nome host (DNS) prima e dopo la connessione al proxy, rispettivamente.
Michael - Dov'è Clay Shirky

51

come adition to airween, un'altra buona idea è quella di aggiungere questo nel tuo .bashrc, così sarai in grado di passare dall'ambiente non proxy a quello proxy:

alias proxyon="export http_proxy='http://YOURPROXY:YOURPORT';export https_proxy='http://YOURPROXY:YOURPORT'"
alias proxyoff="export http_proxy='';export https_proxy=''"

DOVE YOURPROXY: YOURPORT è esattamente questo, il tuo proxy IP e porta :-).

Quindi, semplicemente facendo

proxyon

il tuo sistema inizierà a utilizzare il proxy, e esattamente il contrario con:

proxyoff

34

utilizza il seguente

curl -I -x 192.168.X.X:XX http://google.com

192.168.X.X:XX inserisci l'ip e la porta del tuo server proxy.

-v modalità dettagliata fornirà maggiori dettagli tra cui intestazioni e risposta.


2
Questa dovrebbe essere la risposta. Non tutti vogliono specificare una variabile globale (esportazione) per ogni richiesta HTTP eseguita da ogni client HTTP sul tuo host. Questa opzione offre maggiore flessibilità, IMHO.
Ivanleoncz,

Questo è così utile quando stai provando diversi proxy contro un url. Grazie.
redAce

30

Puoi usare :

curl http://www.example.com --proxy http://125.119.175.48:8909

come spiegato da Karl


26
"come spiegato da Karl", il che significa che questa risposta non è migliore di una copia di quella risposta.
Raedwald,

26

Mi piace usarlo per ottenere l'IP sotto il quale sono visto

curl -x http://proxy_server:proxy_port https://api.ipify.org?format=json && echo

Spero che questo aiuti qualcuno.


19

Poiché curlpuoi configurare il proxy nel tuo file ~/.curlrc( _curlrcsu Windows) aggiungendo proxyvalore, la sintassi è:

proxy = http://username:password@proxy-host:port

Questo è tutto! Ho configurato le impostazioni del proxy alcuni anni fa in quel file e oggi mi chiedevo, perché il ricciolo non funziona più ora ora l'indirizzo del proxy è cambiato e tutti i parametri sono impostati correttamente. Grazie per quello!
emale

15

Riassumendo tutte le grandi risposte menzionate:

curl -x http://<user>:<pass>@<proxyhost>:<port>/ -o <filename> -L <link>

8

Con un proxy con autenticazione utilizzo:

curl -x <protocol>://<user>:<password>@<host>:<port> --proxy-anyauth <url>

perché, non so perché curl non usi / catturi le variabili di ambiente http [s] _proxy .



3

Non è necessario esportare la http[s]_proxyvariabile shell se si sta semplicemente impostando il proxy per un comando una tantum. per esempio

http_proxy=http://your.proxy.server:port curl http://www.example.com

Detto questo, preferirei curl -xse sapessi che avrei sempre usato un proxy.


2

A seconda del posto di lavoro, potrebbe essere necessario specificare -kl' --insecureopzione o per l'arricciatura per superare potenziali problemi con i certificati CA.

curl -x <myCompanyProxy>:<port> -k -O -L <link to file to download>

1
sudo curl -x http://10.1.1.50:8080/ -fsSL https://download.docker.com/linux/ubuntu/gpg

Questo ha funzionato perfettamente per me, l'errore viene perché l'arricciatura deve impostare il proxy

Ricorda di sostituire il proxy con il tuo proxy, il mio, "esempio" era http://10.1.1.50:8080/ .


0

Nel caso in cui il proxy stia utilizzando un proxy automatico con file PAC. Possiamo trovare il proxy effettivo dal javascript dall'URL PAC.

E se il proxy necessita di autenticazione, possiamo prima utilizzare un normale browser Web per accedere al sito Web che promuoverà il dialogo di autenticazione. Dopo l'autenticazione, possiamo usare WireShark per acquisire il pacchetto http che invia al server proxy, dal pacchetto http, possiamo ottenere il token di autenticazione dall'intestazione http: Proxy-Authorization

Quindi possiamo impostare la variabile di ambiente http_proxy e includere anche il token di autenticazione nell'intestazione http: Proxy-Authorization

export http_proxy = http: // proxyserver: port

curl -H "Autorizzazione proxy: xxxx" http: // targetURL

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.