Como faço o curl ignorar o proxy?

106

Como faço o curl ignorar o proxy? Definir $ NO_PROXY não parece funcionar para mim.

ksuralta
fonte
1
Ajudaria as pessoas a responder se você fornecesse mais informações. Em que plataforma você está? De onde curl está obtendo as configurações de proxy? Qual protocolo (HTTP, FTP)? Que tipo de proxy (HTTP, SOCKS)? É um proxy transparente? Você pode mostrar um conjunto exato de comandos que exibem seu problema, junto com sua saída?
Brian Campbell,

Respostas:

54

Presumo que curl esteja lendo o endereço de proxy da variável de ambiente http_proxye que a variável deve manter seu valor. Então, em um shell como o bash, export http_proxy='';antes de um comando (ou em um script de shell) mudar temporariamente seu valor.

(Veja o manual do curl para todas as variáveis ​​que ele olha, sob o ENVIRONMENTtítulo.)

Anônimo
fonte
19
Ou simplesmenteunset http_proxy
joelittlejohn
Uma nota: existem outras variáveis ​​env * _proxy como ftp_proxy. Eu acho que aqui está uma lista completa wiki.archlinux.org/index.php/proxy_settings .
Dmitriusan
Se não quiser substituir o http_proxy caso a caso, você pode configurar os domínios para ignorar com $ no_proxy e, em seguida, criar um alias para seu curl: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n
1
@jdebon Isso não funciona se você tiver um curinga nessa variável de ambiente, pelos motivos descritos abaixo ( stackoverflow.com/a/17710829/2189128 ).
Jeff
@Jeff Não é o meu caso, mas local legal, pode causar algum problema para outras pessoas. Obrigado!
Sir4ur0n
243

Se você curltiver pelo menos a versão 7.19.4, você pode apenas usar a --noproxybandeira.

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

Do manual .

Scott Offen
fonte
5
curl: opção --noproxy: é desconhecido
Roger Ng
2
@RogerNg, se o manual ou uso mudou desde que respondi à pergunta, fique à vontade para atualizar a resposta ou escrever a sua própria. No entanto, no momento da redação, essa resposta estava correta para a pergunta feita. Se sua instalação não está se comportando de acordo com as especificações, esse é outro problema.
Scott Offen
3
curl --noproxy stackoverflow.com stackoverflow.com Este é o elogio correto.
arulraj.net
2
Presumo que essa --noproxyopção não esteja disponível para versões mais antigas do curl (por exemplo, aqueles que são usados ​​em Centos / RHEL 5.x)
Dmitriusan
2
Com base na documentação, a única maneira com que isso poderia funcionar --noproxy 127.0.0.1seria se stackoverflow.com estivesse sendo executado em localhost.
dannysauer
70

Eu tive o mesmo problema porque defini as variáveis ​​de ambiente http_proxy e https_proxy. Mas, ocasionalmente, eu me conecto a uma rede diferente e preciso ignorar o proxy temporariamente. A maneira mais fácil de fazer isso (sem alterar as variáveis ​​de ambiente) é:

curl --noproxy '*' stackoverflow.com

Do manual: "O único curinga é um único caractere *, que corresponde a todos os hosts e desabilita efetivamente o proxy."

O caractere * é citado de forma que não seja expandido erroneamente pelo shell.

wisbucky
fonte
12
observação para futuros usuários: o Bash expande os arquivos locais se eu não citar o * entãocurl --noproxy "*" stackoverflow.com
Adam
Muito útil e digno de nota que isso também parece ignorar o proxy (SOCKS) que defini em meu arquivo
.curlrc
1
Esta é a resposta que funcionou para mim usando curl versão 7.22.0
xpereta
23

Isso funciona muito bem, defina a string do proxy para ""

curl -x "" http://www.stackoverflow.com
ericcurtina
fonte
11

Adicione suas preferências de proxy em .curlrc

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

Isso faz com que todos os domínios dev e a solicitação da máquina local ignorem o proxy.

Clemens Tolboom
fonte
1
//, Este é o único que mostra um exemplo com um valor com um valor DNS começando com ..
Nathan Basanese
Não deve ser confundido com a variável env no_proxy (com sublinhado)
Simon Perepelitsa
7

Longo tiro, mas tente definir o proxy para "" (string vazia) que deve substituir todas as configurações de proxy de acordo com a página do manual.

Louis
fonte
2
Não é um "tiro longo" - é a maneira correta de fazer isso. De acordo com a minha página de manual do curl (7.15.5, que não mostra uma opção '--noproxy'), -x / - proxy <proxyhost [: porta]> ... Esta opção substitui as variáveis ​​de ambiente existentes que definem o proxy para usar. Se houver uma variável de ambiente definindo um proxy, você pode definir o proxy como "" para substituí-lo.
Rob Cranfill
5
Em '09, tudo era um tiro no escuro.
Louis
5
+1, -x "" faz isso. --noproxy com curinga não funciona com meu bash, mesmo se eu citar o "*"
Eugene
@Eugene: Está funcionando no bash 4.3.11 e deve ser citado.
karatedog
6

Primeiro, listei a configuração de proxy atual com

env | sort | less

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

Então eu tentei definir

export http_proxy=";" 

que deu esta mensagem de erro:

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

Tentou

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

e funcionou!

PS! Lembre-se de definir o proxy http de volta para suas configurações originais com

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

Eu tenho http_proxye estou https_proxydefinido. Não quero remover e definir novamente esses ambientes, mas --noproxy '*' funciona perfeitamente para mim.

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

Resposta fraca, mas: Lembre-se de certificar-se de que nenhum proxy esteja definido em um ~/.curlrcarquivo (...).

jtlz2
fonte
1
Obrigado. Eu estava coçando a cabeça por que o curl não respeita as regras ambientais locais. E então eu pesquisei o .curlrc e havia algumas configurações adicionais. Adicionado no_proxy lá e funcionou!
n3o
1

No meu caso (macos, curl 7.54.0), tenho o proxy abaixo definido com~/.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 motivo desconhecido, esta versão do curlnão pode funcionar com variáveis ​​de ambiente NO_PRXYe no_proxycorretamente, então eu desmarco as variáveis ​​de ambiente proxy uma por uma, até que para HTTPS_PROXYe https_proxy.

unset HTTPS_PROXY
unset https_proxy

ele começa a funcionar e pode se conectar a urls internos

Portanto, eu recomendaria remover todas as variáveis ​​de proxy se você tiver em seu ambiente como solução temporária.

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
BMW
fonte
-1

Meu curl não estava ignorando o proxy no Ubuntu 12.04 até que eu configurei a variável de ambiente "no_proxy" (minúsculas). A opção --noproxy não estava disponível.

user2646026
fonte