executando solicitações HTTP com cURL (usando PROXY)


451

Eu tenho este endereço de proxy: 125.119.175.48:8909

Como posso executar uma solicitação HTTP usando cURL como curl http://www.example.com, mas especificando o endereço de proxy da minha rede?

Respostas:


411

Maneira geral:

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

Em seguida, você pode conectar-se através de proxy a partir de (muitos) aplicativos.

E, conforme comentário abaixo, para https:

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

76
Quando você precisa de tráfego HTTPS proxy, a variável de ambiente é maiúsculas: https_proxy
phatblat

18
Nas páginas do manual As variáveis ​​de ambiente podem ser especificadas em minúsculas ou maiúsculas. A versão em minúscula tem precedência. http_proxy é uma exceção, pois está disponível apenas em letras minúsculas. O uso de uma variável de ambiente para configurar o proxy tem o mesmo efeito que o uso da opção --proxy.
Capitão Lepton

@BipinVayalu, o que você deseja verificar? Dessa maneira, como descrevi acima, o cliente usa o proxy "caminho direto", não de forma transparente. Portanto, o proxy fornece as respostas HTTP padrão (incluindo códigos HTTP). Se você exportar uma variável de ambiente http_proxy incorreta (por exemplo, porta incorreta ...), o cliente não poderá se conectar a ela e será exibida uma mensagem de erro: "Aviso! Não foi possível conectar ao host remoto!" Ou algo semelhante - tente :) :)
2014

15
Se você verificar o código fonte do curl, verá no url.c (linha 4337 na versão 7.39) que eles verificam a versão em minúsculas e, se não encontrarem, verifique a maiúscula.
Raistmaj

1
A maioria dos usuários me enviou uma correção, agora eu compartilho isso. Se você deseja usar a conexão HTTPS por meio de proxy, faça o seguinte: exporte https_proxy = your.proxy.server: port Observe que há um proto "http" no esquema da URL, não no httpS!
airween 23/08/15

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.

curl: (7) não foi possível conectar ao host curl: (7) não foi possível conectar ao host #
user873286 27/12/12

Eu obtenho erro acima quando executo este comando: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1 #
user873286

61
"-x, --proxy" significa que qualquer um pode ser usado. O comando deve ser "curl -x 122.72.2.200:80 mysite.com/test.php?id=1 " ou "curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1 "
IBBoard 4/12/12

8
Os documentos estão corretamente citados como acima, no entanto, o usuário e a senha devem ser expressos de maneira diferente:-x user:password@proxyhost:port
Ed Chapel

Obrigado pela melhor resposta!
haotang 8/08/16

128

As soluções acima podem não funcionar com algumas versões de curl que eu experimentei (curl 7.22.0). Mas o que funcionou para mim foi:

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

Espero que resolva o problema melhor!


Correr para o mesmo problema, a onda enviado pelo Debian Wheezy ainda não suporta o truque env
hyperknot

Tenho esta vez[1] 4812
Aminah Nuraini

80

Lembre-se de que, se você estiver usando um proxy SOCKS, em vez de um proxy HTTP / HTTPS, precisará usar a --socks5opção:

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

Você também pode usar em --socks5-hostnamevez de --socks5resolver o DNS no lado do proxy.


6
Isso não funcionou para mim, mas usar --socks5-hostnamefuncionou.
Michał Rybak

2
@ MichałRybak que funcionará da mesma forma, mas resolverá o DNS no lado do proxy. Veja a página de manual para mais detalhes.
Filipe Correia

3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339parece funcionar bem para mim. A --proxyopção é de alguma forma inferior à do --socks5uso de proxies socks5?

@ user993683 Depende da versão. --proxyé provavelmente o que você deseja agora, mas nem sempre foi suportado. Observe também que socks5://e socks5h://execute a resolução de nome de host (DNS) antes e depois da conexão com o proxy, respectivamente.
Michael - de onde Clay Shirky

51

como uma adição ao ar, outra boa idéia é adicionar isso ao seu .bashrc, para que você possa alternar do ambiente sem proxy para o ambiente com proxy:

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

ONDE YOURPROXY: YOURPORT é exatamente isso, seu proxy de porta e IP :-).

Então, simplesmente fazendo

proxyon

seu sistema começará a usar o proxy, e exatamente o oposto com:

proxyoff

34

use o seguinte

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

192.168.X.X:XX coloque o ip e a porta do servidor proxy.

-v modo detalhado, ele fornecerá mais detalhes, incluindo cabeçalhos e resposta.


2
Essa deve ser a resposta. Nem todo mundo deseja especificar uma variável global (exportação) para cada solicitação HTTP realizada por cada cliente HTTP em seu host. Esta opção oferece mais flexibilidade, IMHO.
precisa saber é o seguinte

Isso é útil quando você está tentando proxies diferentes em um URL. Obrigado.
Redebro

30

você pode usar :

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

como explicado por Karl


26
"como explicado por Karl", o que significa que esta resposta não é melhor do que uma cópia dessa resposta.
Raedwald 14/02

26

Eu gosto de usar isso para obter o IP sob o qual sou visto

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

Espero que isso ajude alguém.


19

Para curlvocê configurar o proxy no seu arquivo ~/.curlrc( _curlrcno Windows) adicionando proxyvalor, a sintaxe é:

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

É isso aí! Configurei a configuração de proxy há alguns anos no arquivo e se perguntou hoje, por que o curl não funciona mais agora, o endereço do proxy mudou e os ambientes estão definidos corretamente. Obrigado por isso!
eminino

15

Apenas resumindo todas as ótimas respostas mencionadas:

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

8

Com um proxy com autenticação eu uso:

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

porque, não sei por que o curl não usa / captura variáveis ​​de ambiente http [s] _proxy .



3

Você não precisa exportar a http[s]_proxyvariável do shell se estiver apenas configurando o proxy para um comando único. por exemplo

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

Dito isto, eu preferiria curl -xse soubesse que sempre usaria um proxy.


2

Dependendo do seu local de trabalho, você também pode precisar especificar -ka --insecureopção ou a opção curl para obter possíveis problemas anteriores com os certificados da 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

Isso funcionou perfeitamente para mim, o erro vem porque o curl precisa definir o proxy

Lembre-se de substituir o proxy pelo seu proxy, meu, "exemplo" era http://10.1.1.50:8080/ .


0

Caso o proxy esteja usando proxy automático com arquivo PAC. Podemos encontrar o proxy real a partir do javascript na URL do PAC.

E se o proxy precisar de autenticação, primeiro podemos usar um navegador da web normal para acessar o site que promoverá o diálogo de autenticação. Após a autenticação, podemos usar o wireshark para capturar o pacote http enviado ao servidor proxy, a partir do pacote http, podemos obter o token de autenticação no cabeçalho http: Proxy-Authorization

Em seguida, podemos definir a variável de ambiente http_proxy e também incluir o token de autenticação no cabeçalho http: Proxy-Authorization

exportar http_proxy = http: // proxyserver: port

curl -H "Autorização de proxy: xxxx" http: // targetURL

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.