【问题标题】:Accessing Github behind corporate proxy Node.js在企业代理 Node.js 后面访问 Github
【发布时间】:2015-09-15 18:48:36
【问题描述】:

我在从cmd 调用以下命令以安装 PhoneGap 时遇到问题:

npm install -g phonegap

返回如下错误:

Failed to connect to github.com port 443: Timed out

关于这个主题有很多问题,而且它们似乎都提供了相同的答案 - 确保配置了 gitnodejs 的代理设置。我这样设置node 代理设置:

npm config set proxy http://proxyname:8080
npm config set https-proxy http://proxyname:8080

对于git

git config --global http.proxy http://proxyname:8080
git config --global https.proxy http://proxyname:8080

git config --listnpm config list 都确认这些代理设置已到位。

我还通过访问Windows Firewall -> Allow a program or feature through windows firewall 允许程序通过防火墙。然后我为Node.jsgit 选择了node.exe,我选择了git.exe

但是,我仍然遇到无法连接到 Github 的问题。还有什么我遗漏或忘记设置的吗?首次安装 Node.js 和 Git 以完成此任务。

【问题讨论】:

    标签: node.js git cordova proxy phonegap-plugins


    【解决方案1】:

    除了上述设置之外,如果某些下载的库使用git:// 协议而不是https:// 声明其依赖项,则可能会出现此错误。这些依赖项通常会因上述错误而失败。

    要解决此问题,您可以运行以下命令:

    git config --global url."https://".insteadOf git://
    

    这将为 Git 添加一个配置选项,要求 Git 在 URL 使用 git:// 协议时使用 https

    此设置为我解决了许多代理问题。

    【讨论】:

    • 非常感谢您的回复,我刚刚尝试了您的建议,但问题仍然存在。奇怪...
    • 这里可能有更多信息:stackoverflow.com/questions/783811/…
    • 太棒了!哦,大声笑,我刚从 bash-it repo 看到 nwinkler。 bash-it-docker 打招呼并感谢您的回答 :)
    • 解决了我的问题:在代理后面,安装自定义 git repo,挂在 npm-session
    【解决方案2】:

    您需要将代理身份验证添加到您的命令应用程序。我假设您在 Windows 中工作,以下对我有用(除非运行 git 命令,否则我不需要将代理添加到 npm 或 git)。

    在您的活动命令窗口中,您需要为每个会话使用其中一个或两个,包括初始安装添加设备或插件以及首次构建应用程序:

    设置 https_proxy=http://username:password@proxy:port

    设置 http_proxy=http://username:password@proxy:port

    所以我的看起来像这样:

    设置 https_proxy=http://john.doe:1234@proxy.det.nsw.edu.au:8080

    【讨论】:

    • 就是这样!非常感谢!
    • 我的密码中有“@”。如何在 git bash 中使用命令行输入?
    • @Raulp 不,它不会正确解析,您需要从密码中删除“@”
    • @BenJones 谢谢它的工作!我不得不用 %40 替换 @
    【解决方案3】:

    使用 git 2.8(2016 年 3 月),您不必在 url 中以明文形式嵌入密码。

    请参阅commit 372370fcommit ef97639(2016 年 1 月 26 日)Knut Franke (``)
    帮助者:Junio C Hamano (gitster)Eric Sunshine (sunshinebell28)Elia Pinto (devzero2000)
    (由 Junio C Hamano -- gitster -- 合并到 commit 30f302f,2016 年 2 月 3 日)

    http: 使用凭证 API 处理代理认证

    目前,将代理凭据传递给 curl 的唯一方法是将它们包含在代理 URL 中。通常,这意味着它们最终会以一种或另一种方式未加密的磁盘上(通过包含在~/.gitconfig、shell 配置文件或历史记录中)。
    由于代理身份验证通常使用域用户,因此凭据可能是安全敏感的;因此,需要一种更安全的凭据传递方式。

    如果配置的代理包含用户名但不包含密码,则查询 凭证 API 之一。此外,请确保我们批准/拒绝代理凭据 适当地。 所以:

    除了 curl 可以理解的语法之外,还可以指定一个 带有用户名但没有密码的代理字符串,在这种情况下 git 将尝试以与它相同的方式获取一个其他凭据。
    请参阅gitcredentials 了解更多信息。
    因此语法是:

    [protocol://][user[:password]@]proxyhost[:port]
    

    这可以在每个远程的基础上被覆盖;见remote.<name>.proxy


    http: 允许选择代理认证方式

    CURLAUTH_ANY 不适用于通过 307 重定向到错误页面而不是 407 列出支持的身份验证方法来回答未经身份验证的请求的代理。
    因此,允许使用环境变量GIT_HTTP_PROXY_AUTHMETHOD或配置变量http.proxyAuthmethodremote.<name>.proxyAuthmethod来设置认证方式(以此类推 到http.proxyremote.<name>.proxy)。

    支持以下值:

    • anyauth(默认)
    • 基本
    • 摘要
    • 协商
    • ntlm

    【讨论】:

      猜你喜欢
      • 2014-10-30
      • 1970-01-01
      • 2015-09-10
      • 2011-07-18
      • 1970-01-01
      • 2020-02-27
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多