【问题标题】:Install Symfony on Windows behind proxy server with NTLM authentication在具有 NTLM 身份验证的代理服务器后面的 Windows 上安装 Symfony
【发布时间】:2015-11-05 04:07:19
【问题描述】:

我试图在我公司的服务器上下载并安装 Symfony...

c:\> php -r "readfile('http://symfony.com/installer');" > symfony

..并得到以下错误(部分是德语,但你会明白的):

PHP Warning:  readfile(http://symfony.com/installer): failed to open stream: Es konnte keine Verbindung hergestellt werd en, da der Zielcomputer die Verbindung verweigerte.
 in Command line code on line 1

所以我通过浏览器手动下载了它(效果很好)并尝试创建一个新站点:

php symfony.phar new blog

现在我收到了这个错误:

[RuntimeException]
There was an error downloading Symfony from symfony.com server:
Client error response [url] http://symfony.com/download?v=Symfony_Standard_Vendors_latest.tgz [status code] 407 [re
ason phrase] Proxy Authentication Required

[GuzzleHttp\Exception\ClientException]
Client error response [url] http://symfony.com/download?v=Symfony_Standard_Vendors_latest.tgz [status code] 407 [re
ason phrase] Proxy Authentication Required

所以我退了一步,看看我是否可以在 PHP 脚本中执行 cURL 请求。我用下面的脚本试了一下(我公司用的是代理服务器,NTLM认证):

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.company.loc');
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);
curl_setopt($ch, CURLOPT_PROXYTYPE, 'HTTP');
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
echo curl_exec($ch);
curl_close($ch);

而且效果很好。

我必须做什么才能安装和使用 Symfony。在哪里定义代理、凭据和 NTLM 方法?我尝试在环境变量中将 HTTP_PROXY 添加为“http://user:password@proxy.company.loc:8080”,但这没有帮助(也许我还必须在某处添加身份验证类型 NTLM)。

服务器是 Windows Server 2012 R2。 PHP 版本是 5.6.5,Apache 是 2.4.12。

感谢您的帮助,如有任何语法错误,我们深表歉意!

【问题讨论】:

    标签: php symfony curl networking proxy


    【解决方案1】:

    我将描述我自己使用的解决方案。

    1. 下载cntlm-0.92.3-setup.exe并安装(会设置系统服务)。
    2. 配置 cntlm.ini (C:\Program Files (x86)\Cntlm\cntlm.ini) - 代理地址、无代理、域帐户等
    3. 重新启动 Cntlm 身份验证代理服务。
    4. 将 http_proxy/https_proxy 设置为 http://localhost:3128(系统范围方法)
    5. 立即试用 symfony 安装程序

    有时它可能会有点慢,但它确实有效。我将此解决方案用于所有不支持与系统范围代理集成的控制台应用程序。 Cntlm 也适用于基于 unix 的操作系统。

    希望对您有所帮助。

    【讨论】:

    • 太好了,谢谢!我现在可以在不设置CURLOPT_PROXYAUTHCURLOPT_PROXYUSERPWD 的情况下执行前面提到的cURL。我只需要使用 127.0.0.1 作为 CURLOPT_PROXY 和 3128 作为 CURLOPT_PROXYPORT。我将语言环境 IE 的代理设置更改为相同的值,它也很好用。但我停留在第 4 步。如何在系统范围内设置代理设置?我创建了一个名为 http_proxy 的环境变量,其值为localhost:3128。我还找到了this post 并使用netsh winhttp import proxy source=ie 设置了WinHTTP-proxy 设置(不确定是否有必要)。
    • 嗯,你不需要在 IE 中更改代理。我主要将 cntlm 代理用于 symfony 安装程序和作曲家。几乎所有来自 unix 世界的控制台应用程序都知道 http_proxy 环境变量(例如 Git)。这就是我认为的“系统范围”。真正的系统范围代理在 Internet 选项中。但并非所有应用程序都使用它(您知道 symfony.phar 就是其中之一),这是 cntlm 的用例。
    • Composer does use the variable http_proxy 对我来说效果很好,我可以用 Composer 安装 Symfony。所以我想我的问题已经解决了,非常感谢! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多