realizar solicitudes HTTP con cURL (usando PROXY)

451

Tengo esta dirección de proxy: 125.119.175.48:8909

¿Cómo puedo realizar una solicitud HTTP usando cURL like curl http://www.example.com, pero especificando la dirección proxy de mi red?

usuario873286
fuente

Respuestas:

411

Forma general:

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

Luego puede conectarse a través de proxy desde (muchas) aplicaciones.

Y, según el comentario a continuación, para https:

export https_proxy=https://your.proxy.server:port/
airween
fuente
76
Cuando necesite proxy del tráfico HTTPS, la variable de entorno es mayúscula: HTTPS_PROXY
phatblat el
18
Desde las páginas del manual Las variables de entorno se pueden especificar en minúsculas o mayúsculas. La versión en minúscula tiene prioridad. http_proxy es una excepción, ya que solo está disponible en minúsculas. Usar una variable de entorno para configurar el proxy tiene el mismo efecto que usar la opción --proxy.
Capitán Lepton
@BipinVayalu, ¿qué quieres comprobar? De esta manera, lo que describo anteriormente, el cliente utiliza el proxy "vía directa", no de forma transparente. Por lo tanto, el proxy proporciona las respuestas HTTP estándar (incluidos los códigos HTTP). Si exporta una variable de entorno http_proxy incorrecta (p. Ej., Puerto defectuoso ...), el cliente no puede conectarse a eso y le da un mensaje de error: "¡Advertencia! ¡No se pudo conectar al host remoto!", O algo similar - solo inténtalo :)
airween
15
Si verifica el código fuente curl, verá en url.c (línea 4337 en la versión 7.39) que verifican la versión en minúsculas y si no pueden encontrarla, verifique en mayúsculas.
Raistmaj
1
La mayoría de los usuarios me enviaron una corrección, ahora lo comparto. Si desea utilizar la conexión HTTPS a través del proxy, debe hacer esto: export https_proxy = your.proxy.server: port Tenga en cuenta que hay un protocolo "http" en el esquema de URL, ¡no httpS!
airween
662

De 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.
Karl Barker
fuente
curl: (7) no se pudo conectar al host curl: (7) no se pudo conectar al host
user873286
Obtengo el error anterior cuando ejecuto este comando: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286
61
"-x, --proxy" significa que se puede usar cualquiera de los dos. El comando debe ser "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
Los documentos se citan correctamente como se indica arriba, sin embargo, el usuario y la contraseña deben expresarse de manera diferente:-x user:password@proxyhost:port
Ed Chapel
Gracias por la mejor respuesta!
Haotang
128

Las soluciones anteriores pueden no funcionar con algunas versiones de curl. Las probé por mí mismo (curl 7.22.0). Pero lo que funcionó para mí fue:

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

Espero que resuelva el problema mejor!

Amar
fuente
Se encuentra con el mismo problema, el rizo enviado por Debian Wheezy todavía no es compatible con el truco env
hyperknot
En cambio[1] 4812
Aminah Nuraini
80

Tenga en cuenta que si está utilizando un proxy SOCKS, en lugar de un proxy HTTP / HTTPS, deberá usar el --socks5interruptor en su lugar:

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

También puede usar en --socks5-hostnamelugar de --socks5resolver DNS en el lado del proxy.

Filipe Correia
fuente
66
Esto no funcionó para mí, pero usarlo --socks5-hostnamesí.
Michał Rybak
2
@ MichałRybak que funcionará igual pero resolverá DNS en el lado del proxy. Vea la página del manual para más detalles.
Filipe Correia
3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339Parece funcionar bien para mi. ¿Es la --proxyopción de alguna manera inferior a --socks5cuando se usan proxies socks5?
@ user993683 Depende de la versión. --proxyes probablemente lo que quieres ahora, pero no siempre fue compatible. También tenga en cuenta que socks5://y socks5h://realice la resolución de nombre de host (DNS) antes y después de conectarse al proxy, respectivamente.
Michael - ¿Dónde está Clay Shirky?
51

como una adición a airween, otra buena idea es agregar esto a su .bashrc, para que pueda cambiar de entorno no proxy a proxy:

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

DONDE YOURPROXY: YOURPORT es exactamente eso, su ip y proxy de puerto :-).

Entonces, simplemente haciendo

proxyon

su sistema comenzará a usar el proxy, y todo lo contrario con:

proxyoff
Alejandro Moreno
fuente
34

usa lo siguiente

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

192.168.X.X:XX ponga su servidor proxy ip y puerto.

-v modo detallado dará más detalles incluyendo encabezados y respuesta.

13krn
fuente
2
Esta debería ser la respuesta. No todos quieren especificar una variable global (exportación) para cada solicitud HTTP realizada por cada cliente HTTP en su host. Esta opción da más flexibilidad, en mi humilde opinión.
ivanleoncz
Esto es muy útil cuando estás probando diferentes proxies contra una url. Gracias.
redAce
30

puedes usar :

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

como lo explicó Karl

smitkpatel
fuente
26
"como lo explicó Karl", lo que significa que esta respuesta no es mejor que una copia de esa respuesta.
Raedwald
26

Me gusta usar esto para obtener la IP bajo la cual se me ve

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

Espero que esto ayude a alguien.

bmetge
fuente
19

Para curlque pueda configurar el proxy en su archivo ~/.curlrc( _curlrcen Windows) agregando proxyvalor, la sintaxis es:

proxy = http://username:password@proxy-host:port
kenorb
fuente
¡Eso es! Configuré la configuración del proxy hace unos años en ese archivo y me pregunté hoy, por qué curl ya no funciona, ahora la dirección del proxy cambió y los valores del entorno están configurados correctamente. ¡Gracias por eso!
Emale
15

Solo resumiendo todas las excelentes respuestas mencionadas:

curl -x http://<user>:<pass>@<proxyhost>:<port>/ -o <filename> -L <link>
M. Mashaye
fuente
8

Con un proxy con autenticación uso:

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

porque no sé por qué curl no usa / catch http [s] _proxy variables de entorno.

Pedro R. Sánchez A.
fuente
6
C:\Desktop>curl --head https://www.google.com/ --proxy 1.1.1.1:8080
Debashish Saha
fuente
66
Considere agregar una explicación a su solución.
Pochmurnik
3

No necesita exportar la http[s]_proxyvariable de shell si solo está configurando el proxy para un comando único. p.ej

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

Dicho esto, preferiría curl -xque supiera que siempre usaría un proxy.

pensar demasiado
fuente
2

Dependiendo de su lugar de trabajo, es posible que también deba especificar la opción -ko la --insecureopción de curl para evitar posibles problemas con los certificados de CA.

curl -x <myCompanyProxy>:<port> -k -O -L <link to file to download>
Matt Legler
fuente
1
sudo curl -x http://10.1.1.50:8080/ -fsSL https://download.docker.com/linux/ubuntu/gpg

Esto funcionó perfectamente para mí, el error viene porque curl necesita configurar el proxy

Remmember reemplazar el proxy con el servidor proxy, la mía, "ejemplo" era http://10.1.1.50:8080/ .

IbarMario
fuente
0

En caso de que el proxy esté usando el proxy automático con el archivo PAC. Podemos encontrar el proxy real desde el Javascript de la URL de PAC.

Y si el proxy necesita autenticación, primero podemos usar un navegador web normal para acceder al sitio web que promoverá el diálogo de autenticación. Después de la autenticación, podemos usar wireshark para capturar los envíos del paquete http al servidor proxy, desde el paquete http, podemos obtener el token de autenticación desde el encabezado http: Autorización proxy

Luego podemos establecer la variable de entorno http_proxy y también incluir token de autenticación en el encabezado http: Proxy-Authorization

export http_proxy = http: // proxyserver: port

curl -H "Autorización proxy: xxxx" http: // targetURL

Jianwu Chen
fuente