【问题标题】:How do I make curl ignore the proxy?如何让 curl 忽略代理?
【发布时间】:2009-04-29 03:56:07
【问题描述】:

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

【问题讨论】:

  • 如果您提供更多信息,这将有助于人们回答您。你在哪个平台? curl 从哪里获取代理设置?什么协议(HTTP、FTP)?什么样的代理(HTTP、SOCKS)?它是透明代理吗?你能展示一组确切的命令来展示你的问题,以及它们的输出吗?

标签: curl


【解决方案1】:

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

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

来自manual

【讨论】:

  • curl: 选项 --noproxy: 未知
  • @RogerNg,如果在我回答问题后手册或用法发生了变化,请随时更新答案或编写自己的答案。然而,在撰写本文时,这个答案对于所提出的问题是准确的。如果您的安装不符合规范,那完全是另一个问题。
  • curl --noproxy stackoverflow.com stackoverflow.com 这是正确的推荐。
  • 我假设 --noproxy 选项不适用于较旧的 curl 版本(例如用于 Centos/RHEL 5.x 的版本)
  • 根据文档,使用--noproxy 127.0.0.1 的唯一方法是stackoverflow.com 在本地主机上运行。
【解决方案2】:

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

curl --noproxy '*' stackoverflow.com

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

* 字符被引用,这样它就不会被 shell 错误地扩展。

【讨论】:

  • 未来用户须知:如果我不引用 *,Bash 会扩展本地文件,所以 curl --noproxy "*" stackoverflow.com
  • 非常有用且值得注意的是,这似乎也忽略了我在 .curlrc 文件中设置的 (SOCKS) 代理
  • 这是使用 curl 版本 7.22.0 对我有用的答案
【解决方案3】:

将您的代理偏好添加到.curlrc or _curlrc (windows)

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

这会使所有开发域和本地机器请求忽略代理。

请参阅手册页 proxy 和同一页面上的 noproxy。

【讨论】:

  • // ,这是唯一一个显示 DNS 值以 . 开头的值的示例。
  • 不要与环境变量 no_proxy(带下划线)混淆
【解决方案4】:

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

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

【讨论】:

  • 或者干脆unset http_proxy
  • 请注意:还有其他 *_proxy 环境变量,例如 ftp_proxy。我想,这是一个完整的列表wiki.archlinux.org/index.php/proxy_settings
  • 如果您不想逐个覆盖 http_proxy,您可以使用 $no_proxy 配置要忽略的域,然后为您的 curl 设置别名: alias curl='curl - -noproxy $no_proxy'
  • @jdebon 如果您在该环境变量中有一个通配符,那将不起作用,原因如下所述 (stackoverflow.com/a/17710829/2189128)。
  • @Jeff 这不是我的情况,但很好,它可能会给其他人带来一些问题。谢谢!
【解决方案5】:

这很好用,将代理字符串设置为“”

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

【讨论】:

    【解决方案6】:

    如果是 Windows:使用curl --proxy "" ...

    【讨论】:

    • 我很高兴终于尝试了这个。奇迹般有效。谢谢。我的环境使用的是公司代理,而其他选项对我不起作用。
    【解决方案7】:

    远射,但请尝试将代理设置为“”(空字符串),这应该根据手册页覆盖任何代理设置。

    【讨论】:

    • 这不是“远射”——这是正确的做法。根据我 curl 的手册页(7.15.5,它没有显示“--noproxy”选项),-x/--proxy ...此选项覆盖将代理设置为的现有环境变量利用。如果有环境变量设置了代理,可以将代理设置为""来覆盖它。
    • 09 年,一切都遥遥无期。
    • +1, -x "" 做到了。带有通配符的 --noproxy 不适用于我的 bash,即使我引用了“*”
    • @Eugene:它在 bash 4.3.11 中工作,它必须被引用。
    【解决方案8】:

    您应该使用$no_proxy env 变量(小写)。示例请咨询https://wiki.archlinux.org/index.php/proxy_settings

    另外,很久以前 curl 有一个 bug http://sourceforge.net/p/curl/bugs/185/ ,可能你使用的是包含这个 bug 的古老 curl 版本。

    【讨论】:

      【解决方案9】:

      蹩脚的答案,但是:请记住确保在 ~/.curlrc 文件中没有设置代理 (...)。

      【讨论】:

      • 谢谢。我一直在摸索为什么 curl 不尊重本地环境变量。然后我查看了 .curlrc 并且有一些额外的配置。在那里添加了 no_proxy 并且它起作用了!
      【解决方案10】:

      首先,我用

      列出了当前的代理设置
      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
      

      【讨论】:

        【解决方案11】:

        在我的情况下(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
        

        【讨论】:

          【解决方案12】:

          我定义了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"
          }
          

          【讨论】:

          • 它对我不起作用。我在 Windows 上有 curl 7.79.1。我发出 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 错误。在我添加这两个变量之前,它工作得很好。
          【解决方案13】:

          在我设置“no_proxy”(小写)环境变量之前,我的 curl 没有忽略 Ubuntu 12.04 上的代理。 --noproxy 选项不可用。

          【讨论】:

            猜你喜欢
            • 2021-05-21
            • 1970-01-01
            • 1970-01-01
            • 2014-11-12
            • 2019-12-03
            • 2010-10-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多