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.


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.)


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 .


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.


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

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.


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.


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

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"
}

1

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


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

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

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.