【发布时间】:2009-04-29 03:56:07
【问题描述】:
如何让 curl 忽略代理? 设置 $NO_PROXY 似乎对我不起作用。
【问题讨论】:
-
如果您提供更多信息,这将有助于人们回答您。你在哪个平台? curl 从哪里获取代理设置?什么协议(HTTP、FTP)?什么样的代理(HTTP、SOCKS)?它是透明代理吗?你能展示一组确切的命令来展示你的问题,以及它们的输出吗?
标签: curl
如何让 curl 忽略代理? 设置 $NO_PROXY 似乎对我不起作用。
【问题讨论】:
标签: curl
【讨论】:
--noproxy 选项不适用于较旧的 curl 版本(例如用于 Centos/RHEL 5.x 的版本)
--noproxy 127.0.0.1 的唯一方法是stackoverflow.com 在本地主机上运行。
我遇到了同样的问题,因为我设置了 http_proxy 和 https_proxy 环境变量。但有时,我连接到不同的网络,需要暂时绕过代理。最简单的方法(不改变环境变量)是:
curl --noproxy '*' stackoverflow.com
来自手册:“唯一的通配符是单个 * 字符,它匹配所有主机,并有效地禁用代理。”
* 字符被引用,这样它就不会被 shell 错误地扩展。
【讨论】:
curl --noproxy "*" stackoverflow.com
将您的代理偏好添加到.curlrc or _curlrc (windows)
proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1
这会使所有开发域和本地机器请求忽略代理。
请参阅手册页 proxy 和同一页面上的 noproxy。
【讨论】:
. 开头的值的示例。
我假设 curl 正在从环境变量 http_proxy 中读取代理地址,并且该变量应保持其值。然后在像 bash 这样的 shell 中,export http_proxy=''; 在命令之前(或在 shell 脚本中)会暂时改变它的值。
(有关它查看的所有变量,请参阅 curl 的手册,在 ENVIRONMENT 标题下。)
【讨论】:
unset http_proxy
ftp_proxy。我想,这是一个完整的列表wiki.archlinux.org/index.php/proxy_settings。
这很好用,将代理字符串设置为“”
curl -x "" http://www.stackoverflow.com
【讨论】:
如果是 Windows:使用curl --proxy "" ...
【讨论】:
远射,但请尝试将代理设置为“”(空字符串),这应该根据手册页覆盖任何代理设置。
【讨论】:
您应该使用$no_proxy env 变量(小写)。示例请咨询https://wiki.archlinux.org/index.php/proxy_settings。
另外,很久以前 curl 有一个 bug http://sourceforge.net/p/curl/bugs/185/ ,可能你使用的是包含这个 bug 的古老 curl 版本。
【讨论】:
蹩脚的答案,但是:请记住确保在 ~/.curlrc 文件中没有设置代理 (...)。
【讨论】:
首先,我用
列出了当前的代理设置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
【讨论】:
在我的情况下(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_PRXY和no_proxy,然后我一一取消设置代理环境变量,直到HTTPS_PROXY和https_proxy .
unset HTTPS_PROXY
unset https_proxy
它开始工作并可以连接到内部网址
因此,如果您的环境中有临时解决方案,我建议您取消设置所有代理变量。
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
【讨论】:
我定义了http_proxy 和https_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"
}
【讨论】:
curl --noproxy '*' -X GET http://localhost:8080/myapi/v1/cars -H "Content-Type: application/json" -H "My-Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIi..." | json 并且由于我的 HTTP_PROXY 和 HPPTS_PROXY 设置而出现 GATEWAY_TIMEOUT 错误。在我添加这两个变量之前,它工作得很好。
在我设置“no_proxy”(小写)环境变量之前,我的 curl 没有忽略 Ubuntu 12.04 上的代理。 --noproxy 选项不可用。
【讨论】: