¿Cómo hago para que curl ignore el proxy?

106

¿Cómo hago para que curl ignore el proxy? Establecer $ NO_PROXY no parece funcionar para mí.

ksuralta
fuente
1
Ayudaría a la gente a responderte si proporcionas más información. ¿En qué plataforma estás? ¿De dónde obtiene curl la configuración del proxy? ¿Qué protocolo (HTTP, FTP)? ¿Qué tipo de proxy (HTTP, SOCKS)? ¿Es un proxy transparente? ¿Puede mostrar un conjunto exacto de comandos que presenten su problema, junto con su salida?
Brian Campbell

Respuestas:

54

Supongo que curl está leyendo la dirección de proxy de la variable de entorno http_proxyy que la variable debe mantener su valor. Luego, en un shell como bash, export http_proxy='';antes de que un comando (o en un script de shell) cambie temporalmente su valor.

(Consulte el manual de curl para conocer todas las variables que analiza, debajo del ENVIRONMENTencabezado).

Anónimo
fuente
19
O simplementeunset http_proxy
joelittlejohn
Una nota: hay otras * _proxy env variables como ftp_proxy. Creo que aquí hay una lista completa de wiki.archlinux.org/index.php/proxy_settings .
Dmitriusan
Si no desea anular el http_proxy caso por caso, puede configurar los dominios para ignorarlos con $ no_proxy, y luego alias su curl: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n
1
@jdebon Eso no funciona si tiene un comodín en esa variable de entorno, por las razones que se describen a continuación ( stackoverflow.com/a/17710829/2189128 ).
Jeff
@Jeff No es mi caso, pero un buen lugar, podría causar algún problema a otras personas. ¡Gracias!
Sir4ur0n
243

Si tu curles al menos una versión 7.19.4, puedes usar la --noproxybandera.

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

Del manual .

Scott Offen
fuente
5
curl: option --noproxy: is unknown
Roger Ng
2
@RogerNg, si el manual o el uso ha cambiado desde que respondí la pregunta, no dude en actualizar la respuesta o escribir la suya propia. Sin embargo, en el momento de escribir este artículo, esta respuesta era precisa para la pregunta formulada. Si su instalación no se comporta de acuerdo con las especificaciones, ese es otro problema por completo.
Scott Offen
3
curl --noproxy stackoverflow.com stackoverflow.com Este es el elogio correcto.
arulraj.net
2
Supongo que esa --noproxyopción no está disponible para versiones de curl anteriores (por ejemplo, las que se usan en Centos / RHEL 5.x)
Dmitriusan
2
Según la documentación, la única forma en que esto podría haber funcionado --noproxy 127.0.0.1fue si stackoverflow.com se estaba ejecutando en localhost.
dannysauer
70

Me encontré con el mismo problema porque configuré las variables de entorno http_proxy y https_proxy. Pero ocasionalmente, me conecto a una red diferente y necesito omitir el proxy temporalmente. La forma más sencilla de hacer esto (sin cambiar las variables de entorno) es:

curl --noproxy '*' stackoverflow.com

Del manual: "El único comodín es un solo carácter *, que coincide con todos los hosts y deshabilita efectivamente el proxy".

El carácter * se cita para que el shell no lo expanda erróneamente.

Wisbucky
fuente
12
nota para futuros usuarios: Bash expande los archivos locales si no cito el * así quecurl --noproxy "*" stackoverflow.com
Adam
Muy útil y vale la pena señalar que esto también parece ignorar el proxy (SOCKS) que he configurado en mi archivo
.curlrc
1
Esta es la respuesta que me ha funcionado con la versión 7.22.0 de curl
xpereta
23

Esto funciona bien, establezca la cadena de proxy en ""

curl -x "" http://www.stackoverflow.com
ericcurtin
fuente
11

Agregue sus preferencias de proxy en .curlrc

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

Esto hace que todos los dominios de desarrollo y las solicitudes de la máquina local ignoren el proxy.

Clemens Tolboom
fuente
1
//, Este es el único que muestra un ejemplo con un valor con un valor DNS que comienza con ..
Nathan Basanese
No confundir con la variable env no_proxy (con guión bajo)
Simon Perepelitsa
7

Posibilidad remota, pero intente configurar el proxy en "" (cadena vacía) que debería anular cualquier configuración de proxy de acuerdo con la página del manual.

Luis
fuente
2
No es una "posibilidad remota", es la forma correcta de hacerlo. De acuerdo con la página de manual de mi curl (7.15.5, que no muestra una opción '--noproxy'), -x / - proxy <proxyhost [: puerto]> ... Esta opción anula las variables de entorno existentes que configuran el proxy para utilizar. Si hay una variable de entorno que configura un proxy, puede establecer el proxy en "" para anularlo.
Rob Cranfill
5
En el '09, todo era una posibilidad remota.
Louis
5
+1, -x "" lo hace. --noproxy con comodín no funciona con mi bash incluso si cito el "*"
Eugene
@Eugene: Está funcionando en bash 4.3.11 y debe estar entre comillas.
karatedog
6

Primero, enumeré la configuración de proxy actual con

env | sort | less

(debería ser algo como http_proxy=http://wpad.local.machine.location:port number)

Entonces intenté configurar

export http_proxy=";" 

que dio este mensaje de error:

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

Intentó

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

¡Y funcionó!

¡PD! Recuerde volver a configurar http-proxy a su configuración original con

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

Yo tengo http_proxyy estoy https_proxydefinido. No quiero desarmar y volver a configurar esos entornos, pero --noproxy '*' funciona perfectamente para mí.

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"
}
prayagupd
fuente
1

Respuesta coja pero: recuerde asegurarse de que no haya ningún proxy configurado en un ~/.curlrcarchivo (...).

jtlz2
fuente
1
Gracias. Me había estado rascando la cabeza por qué curl no respeta las variables ambientales locales. Y luego busqué el .curlrc y había algunas configuraciones adicionales. ¡Agregó no_proxy allí y funcionó!
n3o
1

En mi caso (macos, curl 7.54.0), tengo el siguiente conjunto de proxy 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

Por una razón desconocida, esta versión de curlno puede funcionar con variables de entorno NO_PRXYy no_proxycorrectamente, luego desactivo las variables de entorno de proxy una por una, hasta que ambas HTTPS_PROXYy https_proxy.

unset HTTPS_PROXY
unset https_proxy

comienza a funcionar y puede conectarse a URL internas

Por lo tanto, recomendaría desarmar todas las variables proxy si las tiene en su entorno como solución temporal.

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
BMW
fuente
-1

Mi curl no estaba ignorando el proxy en Ubuntu 12.04 hasta que configuré la variable de entorno "no_proxy" (minúsculas). La opción --noproxy no estaba disponible.

usuario2646026
fuente