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?

user873286
fonte

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/
airween
fonte
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.
Karl Barker
fonte
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!

Amar
fonte
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.

Filipe Correia
fonte
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
Alejandro Moreno
fonte
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.

13krn
fonte
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

smitkpatel
fonte
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.

bmetge
fonte
19

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

proxy = http://username:password@proxy-host:port
kenorb
fonte
É 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>
M. Mashaye
fonte
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 .

Pedro R. Sánchez A.
fonte
6
C:\Desktop>curl --head https://www.google.com/ --proxy 1.1.1.1:8080
Debashish Saha
fonte
6
Considere adicionar explicações à sua solução.
Pochmurnik 6/09/19
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.

pensar demais
fonte
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>
Matt Legler
fonte
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/ .

IbarMario
fonte
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

Jianwu Chen
fonte