Come faccio a far sì che curl ignori il proxy?


106

Come faccio a far sì che curl ignori il proxy? L'impostazione di $ NO_PROXY non sembra funzionare per me.


1
Aiuterebbe le persone a risponderti se fornissi qualche informazione in più. Su che piattaforma sei? Da dove prende curl le impostazioni del proxy? Quale protocollo (HTTP, FTP)? Che tipo di proxy (HTTP, SOCKS)? È un proxy trasparente? Puoi mostrare un insieme esatto di comandi che mostrano il tuo problema, insieme al loro output?
Brian Campbell,

Risposte:


55

Presumo che curl stia leggendo l'indirizzo proxy dalla variabile di ambiente http_proxye che la variabile debba mantenere il suo valore. Quindi in una shell come bash, export http_proxy='';prima che un comando (o in uno script di shell) modifichi temporaneamente il suo valore.

(Vedi il manuale di curl per tutte le variabili che guarda, sotto il ENVIRONMENTtitolo.)


19
O semplicementeunset http_proxy
joelittlejohn

Una nota: ci sono altre variabili * _proxy env come ftp_proxy. Penso, ecco un elenco completo wiki.archlinux.org/index.php/proxy_settings .
Dmitriusan

Se non vuoi sovrascrivere il http_proxy caso per caso, puoi configurare i domini in modo che ignorino con $ no_proxy, quindi alias il tuo curl: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n

1
@jdebon Questo non funziona se hai un carattere jolly in quella variabile d'ambiente, per i motivi descritti di seguito ( stackoverflow.com/a/17710829/2189128 ).
Jeff

@ Jeff Non è il mio caso, ma un bel posto, potrebbe causare qualche problema ad altre persone. Grazie!
Sir4ur0n

246

Se la tua curlè almeno una versione 7.19.4, potresti semplicemente usare la --noproxybandiera.

curl --noproxy "*" http://www.stackoverflow.com

Dal manuale .


5
curl: option --noproxy: is unknown
Roger Ng

2
@RogerNg, se il manuale o l'utilizzo è cambiato da quando ho risposto alla domanda, sentiti libero di aggiornare la risposta o di scrivere la tua. Tuttavia, al momento della scrittura, questa risposta era accurata per la domanda posta. Se la tua installazione non si comporta secondo le specifiche, questo è un altro problema.
Scott Offen

3
ricciolo --noproxy stackoverflow.com stackoverflow.com Questa è l'affido corretta.
arulraj.net

2
Presumo che l' --noproxyopzione non sia disponibile per le versioni precedenti di curl (ad esempio quelle utilizzate in Centos / RHEL 5.x)
Dmitriusan

2
Sulla base della documentazione, l'unico modo con cui avrebbe potuto funzionare --noproxy 127.0.0.1era se stackoverflow.com fosse in esecuzione su localhost.
dannysauer

71

Ho riscontrato lo stesso problema perché ho impostato le variabili d'ambiente http_proxy e https_proxy. Ma occasionalmente, mi collego a una rete diversa e devo bypassare temporaneamente il proxy. Il modo più semplice per farlo (senza modificare le variabili d'ambiente) è:

curl --noproxy '*' stackoverflow.com

Dal manuale: "L'unico carattere jolly è un singolo carattere *, che corrisponde a tutti gli host e disabilita effettivamente il proxy."

Il carattere * viene citato in modo che non venga espanso erroneamente dalla shell.


12
nota per gli utenti futuri: Bash espande i file locali se non cito * cosìcurl --noproxy "*" stackoverflow.com
Adam

Molto utile e vale la pena notare che questo sembra anche ignorare il proxy (SOCKS) che ho impostato nel mio file
.curlrc

1
Questa è la risposta che ha funzionato per me usando la versione 7.22.0 di curl
xpereta

23

Funziona perfettamente, imposta la stringa proxy su ""

curl -x "" http://www.stackoverflow.com

11

Aggiungi le tue preferenze proxy in .curlrc

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

In questo modo tutti i domini dev e le richieste della macchina locale ignorano il proxy.


1
//, Questo è l'unico che mostra un esempio con un valore con un valore DNS che inizia con ..
Nathan Basanese

Da non confondere con la variabile env no_proxy (con trattino basso)
Simon Perepelitsa

7

Campo lungo ma prova a impostare il proxy su "" (stringa vuota) che dovrebbe sovrascrivere qualsiasi impostazione del proxy in base alla pagina man.


2
Non è un "campo lungo" - è il modo corretto per farlo. Secondo la mia pagina man di curl (7.15.5, che non mostra un'opzione '--noproxy'), -x / - proxy <proxyhost [: port]> ... Questa opzione sovrascrive le variabili di ambiente esistenti che impostano il proxy su uso. Se è presente una variabile di ambiente che imposta un proxy, puoi impostare il proxy su "" per sovrascriverlo.
Rob Cranfill

5
Nel '09, tutto era un tiro lungo.
Louis

5
+1, -x "" lo fa. --noproxy con carattere jolly non funziona con la mia bash anche se cito "*"
Eugene

@ Eugene: Funziona in bash 4.3.11 e deve essere citato.
karatedog


6

Per prima cosa, ho elencato l'impostazione corrente del proxy con

env | sort | less

(dovrebbe essere qualcosa di simile http_proxy=http://wpad.local.machine.location:port number)

Quindi ho provato a impostare

export http_proxy=";" 

che ha dato questo messaggio di errore:

curl: (5) Couldn't resolve proxy ';'

Provato

export http_proxy="" && curl http://servername:portnumber/destinationpath/ -d 55

e ha funzionato!

PS! Ricorda di riportare http-proxy alle impostazioni originali con

export http_proxy=http://wpad.local.machine.location:port number

6

Ho http_proxye https_proxysono definito. Non voglio disarmare e rimettere a posto quegli ambienti, ma --noproxy '*' per me funziona perfettamente.

curl --noproxy '*' -XGET 172.17.0.2:9200
{
  "status" : 200,
  "name" : "Medusa",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.5.0",
    "build_hash" : "544816042d40151d3ce4ba4f95399d7860dc2e92",
    "build_timestamp" : "2015-03-23T14:30:58Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

1

Risposta zoppa ma: ricordati di assicurarti che nessun proxy sia impostato in un ~/.curlrcfile (...).


1
Grazie. Mi stavo grattando la testa perché curl non rispetta gli env vars locali. E poi ho cercato il .curlrc e c'erano alcune configurazioni aggiuntive. Aggiunto no_proxy lì e ha funzionato!
n3o

1

Nel mio caso (macos, curl 7.54.0), ho impostato il proxy di seguito con~/.bash_profile

$ env |grep -i proxy |cut -d = -f1|sort
FTP_PROXY
HTTPS_PROXY
HTTP_PROXY
NO_PROXY
PROXY
ftp_proxy
http_proxy
https_proxy
no_proxy

Con motivi sconosciuti, questa versione di curlnon può funzionare con le variabili di ambiente NO_PRXYe no_proxycorrettamente, quindi ho annullato le variabili di ambiente del proxy una per una, fino a quando entrambe HTTPS_PROXYe https_proxy.

unset HTTPS_PROXY
unset https_proxy

inizia a funzionare e può connettersi a URL interni

Quindi consiglierei di disattivare tutte le variabili proxy se hai nel tuo ambiente come soluzione temporanea.

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

-1

Il mio curl non ignorava il proxy su Ubuntu 12.04 fino a quando non ho impostato la variabile di ambiente "no_proxy" (minuscolo). L'opzione --noproxy non era disponibile.

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.