如何使curl忽略代理?


106

如何使curl忽略代理?设置$ NO_PROXY对我来说似乎不起作用。


1
如果您提供了更多信息,它将帮助人们回答您。您在什么平台上?curl从哪里获取代理设置?什么协议(HTTP,FTP)?什么样的代理(HTTP,SOCKS)?它是透明代理吗?您是否可以显示一组精确的命令来显示问题以及它们的输出?
布赖恩·坎贝尔

Answers:


54

我假设curl正在从环境变量中读取代理地址,http_proxy并且该变量应保留其值。然后在像bash这样的shell中,export http_proxy='';在命令(或在shell脚本中)临时更改其值之前。

(请参阅curl的手册,在ENVIRONMENT标题下查看它的所有变量。)


19
或者简单地unset http_proxy
joelittlejohn

注意事项:还有其他* _proxy env变量,例如ftp_proxy。我认为,这是完整列表wiki.archlinux.org/index.php/proxy_settings
德米特里桑2014年

如果你不希望覆盖HTTP_PROXY对案件逐案基础上,你可以配置$ NO_PROXY忽略域,然后别名您卷曲:别名卷曲=“卷曲--noproxy $ NO_PROXY”
Sir4ur0n

1
@jdebon如果在该环境变量中有通配符,则该方法不起作用,原因如下所述(stackoverflow.com/a/17710829/2189128)。
杰夫

@Jeff这不是我的情况,而是一个好地方,它可能对其他人造成一些问题。谢谢!
Sir4ur0n

243

如果您的curl版本至少是7.19.4,则可以使用该--noproxy标志。

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

手册


5
curl:选项--noproxy:未知
Roger Ng

2
@RogerNg,如果自从我回答问题以来手册或用法已发生更改,请随时更新答案或自行编写。不过,在撰写本文时,此答案对于所提问题是准确的。如果您的安装不符合规范,则完全是另一个问题。
Scott Offen

3
curl --noproxy stackoverflow.com stackoverflow.com 这是正确的建议。
arulraj.net 2014年

2
我认为该--noproxy选项不适用于较早的curl版本(例如,在Centos / RHEL 5.x中使用的那些版本)
Dmitriusan 2014年

2
根据文档,唯一可以使用的方法--noproxy 127.0.0.1是,如果stackoverflow.com在本地主机上运行。
dannysauer '16

70

我遇到了同样的问题,因为我设置了http_proxy和https_proxy环境变量。但有时,我连接到其他网络,需要暂时绕过代理。最简单的方法(不更改环境变量)是:

curl --noproxy '*' stackoverflow.com

在手册中:“唯一的通配符是单个*字符,它匹配所有主机,并有效地禁用了代理。”

带*的字符被加引号,以便它不会被外壳错误地扩展。


12
注:对于未来编用户:猛砸扩大本地文件,如果我不引用*如此curl --noproxy "*" stackoverflow.com
亚当

非常有用且值得注意,这似乎也忽略了我在.curlrc文件中设置的(SOCKS)代理
MatzFan 2016年

1
这是使用curl版本7.22.0对我有用的答案
xpereta

23

正常工作,将代理字符串设置为“”

curl -x "" http://www.stackoverflow.com

11

将代理首选项添加到.curlrc

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

这使得所有开发域和本地计算机请求都忽略了代理。


1
//,这是唯一一个显示示例的示例,该示例的DNS值以开头.
弥敦道(Nathan Basanese)

不要与env变量no_proxy(带下划线)混淆
Simon Perepelitsa

7

远景,但尝试将代理设置为“”(空字符串),该代理应根据手册页覆盖所有代理设置。


2
这不是“远射”-这是正确的方法。根据我curl的手册页(7.15.5,未显示'--noproxy'选项),-x /-proxy <proxyhost [:port]> ...此选项将覆盖将代理设置为的现有环境变量。用。如果有环境变量设置代理,则可以将代理设置为“”以覆盖它。
Rob Cranfill

5
在09年,一切都遥遥无期。
2013年

5
+ 1,-x“”完成。--noproxy和通配符不适合我的bash使用,即使我引用了“ *”
Eugene

@Eugene:它正在bash 4.3.11中运行,必须将其引号。
karatedog


6

首先,我列出了当前的代理设置

env | sort | less

(应该是http_proxy=http://wpad.local.machine.location:port number

然后我尝试设置

export http_proxy=";" 

这给出了此错误信息:

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

试过了

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

而且有效!

PS!请记住使用以下命令将http-proxy设置回其原始设置

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

6

http_proxyhttps_proxy定义。我不想重新设置和设置那些环境,但是 --noproxy '*'对我来说效果很好。

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

回答很me脚,但是:请记住要确保~/.curlrc文件中没有设置代理(...)。


1
谢谢。我一直在摸索为什么curl不尊重本地env var。然后,我查找了.curlrc,并进行了一些其他配置。在那里添加了no_proxy,它起作用了!
n3o

1

在我的情况下(macos,curl 7.54.0),我将以下代理设置为~/.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

原因不明,这个版本的curl不能工作,环境变量NO_PRXYno_proxy适当的话,我取消设置代理环境变量,一个接一个,直到双方HTTPS_PROXYhttps_proxy

unset HTTPS_PROXY
unset https_proxy

它开始工作并可以连接到内部网址

因此,如果您的环境中有临时解决方案,建议您取消设置所有代理变量。

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

-1

直到我设置了“ no_proxy”(小写)环境变量,我的卷曲才一直忽略Ubuntu 12.04上的代理。--noproxy选项不可用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.