PHP Composer 在 http 代理后面的问题

37

我在一个只能使用HTTP或socks代理访问互联网的网络中使用Composer。我设置了http_proxy和https_proxy环境变量。当Composer尝试访问HTTPS URL时,我会得到以下错误信息:

 file could not be downloaded: failed to open stream: Cannot connect to HTTPS server through proxy
据我所知,连接到https网站的唯一方式是使用connect动词。在这个代理后面如何使用composer?

正如我所说,我有HTTP_PROXY / http_proxy环境变量。 - Robert Dolca
6
运行 composer diag 命令来检查您的连接。Composer 有两种与代理通信的方法,很可能使用的那个方法是错误的。 - Sven
@1ed OpenSSL版本为1.0.1.x,我在Ubuntu 12.04上遇到了与boldtrn相同的问题。 - Robert Dolca
https://github.com/composer/composer/issues/2041 - Robert Dolca
我们正在使用Zend Server进行开发。没有更新内置OpenSSL库的选项。这有点有趣,因为Zend Studio中的ZF2应用程序“基于”Composer功能。我花了几个小时才发现没有解决方案。 - emolah
显示剩余4条评论
10个回答

43
如果您使用的是Windows系统,您应该设置相同的环境变量,但需要按照Windows样式设置:
set http_proxy=<your_http_proxy:proxy_port>
set https_proxy=<your_https_proxy:proxy_port>

这将适用于您当前的cmd.exe。如果您想要更加永久地实现此目标,建议您在系统上使用环境变量。


2
如果您需要凭据,请执行以下操作: SET HTTP_PROXY=http://%USER%:%PASSWORD%@%SERVER%:%PORT% - andig

35

如果您使用的是Linux或Unix(包括OS X),您应该将这个放在能够影响您的环境的某个地方:

export HTTP_PROXY_REQUEST_FULLURI=0 # or false
export HTTPS_PROXY_REQUEST_FULLURI=0 #

你可以将其放在/etc/profile中,以影响机器上的所有用户,或者放在你自己的~/.bashrc~/.zshrc中,具体取决于你使用的shell。

如果你使用Windows,在“环境变量”控制面板中打开,并添加一个系统环境变量或用户环境变量,将HTTP_PROXY_REQUEST_FULLURIHTTPS_PROXY_REQUEST_FULLURI都设置为0false

对于其他人阅读此内容(不是您,因为您已经设置好了),请确保使用相同的方法将HTTP_PROXYHTTPS_PROXY分别设置为正确的代理。如果你使用Unix/Linux/OS X,则同时设置大写和小写版本的变量名是最完整的方法,因为有些东西只适用于小写版本,而我IRC有些则使用大写。 (我经常使用一种混合环境,即Windows上的Cygwin,对我来说拥有两者都很重要,但是纯Unix / Linux环境可能只需要小写字母。)

如果你完成了所有这些工作仍然无法使它工作,并且你确定已经设置了正确的代理地址,请查看你的公司是否使用Microsoft代理服务器。如果是这样,你可能需要安装Cntlm作为子代理,在Composer(等)和Microsoft代理服务器之间进行连接。请搜索CNTLM以获取更多信息和设置说明。


8

如果您必须使用凭据,请尝试以下方法:

export HTTP_PROXY="http://username:password@webproxy.com:port"

我还需要将HTTP_PROXY_REQUEST_FULLURI设置为1,并且在Windows上正确地编码我的密码。 - Arthur

7

试试这个:

export HTTPS_PROXY_REQUEST_FULLURI=false

几周前,在一家公司的代理后工作时,我解决了这个问题。


@RobertDolca:看看我的回答,如果还不行,请告诉我。我最近也遇到了这个问题,希望我能帮你让它正常工作。 - iconoclast
很抱歉,我现在无法重现这个问题。 - Robert Dolca

6

这个可以正常工作,这是我的案例...

C:\xampp\htdocs\your_dir>SET HTTP_PROXY="http://192.168.1.103:8080" 

请将IP地址和端口号替换为您自己的信息。

1
我不小心添加了一个尾随斜杠。删除后,composer-setup 能够继续进行。其他工具(如 wget...)似乎忽略了该斜杠。 - MKesper

3

在Windows上插入:

set http_proxy=<proxy>
set https_proxy=<proxy>

之前

php "%~dp0composer.phar" %*

或者在Linux中插入:

export http_proxy=<proxy>
export https_proxy=<proxy>

之前

php "${dir}/composer.phar" "$@"

2
您可以使用标准的HTTP_PROXY环境变量。只需将其设置为代理的URL即可。许多操作系统已经为您设置了此变量。
只需导出变量,然后您就不必一次又一次地输入它。
export HTTP_PROXY="http://johndoeproxy.cu:8080"

然后您可以正常执行composer update

2

iconoclast的答案对我没用。

我将我的php从5.3.*(xampp 1.7.4)升级到5.5.*(xampp 1.8.3),问题得到了解决。

首先尝试iconoclast的答案,如果不起作用,则升级可能会解决问题。


2

操作超时(IPv6问题)# 如果IPv6配置不正确,您可能会遇到错误。常见的错误是:

最初的回答:Operation timed out (IPv6 issues)

The "https://getcomposer.org/version" file could not be downloaded: failed to
open stream: Operation timed out

我们建议您修复IPv6设置。如果无法实现,可以尝试以下解决方法: 解决方法:Linux 在Linux上,运行以下命令似乎有助于使IPv4流量比IPv6具有更高的优先级,这比完全禁用IPv6更好:
sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf"

解决Windows问题:

很遗憾,在Windows上唯一的方法就是完全禁用IPv6(可以在Windows或家庭路由器中进行设置)。

解决Mac OS X问题:

获取您的网络设备名称:

networksetup -listallnetworkservices

在该设备上禁用IPv6(在本例中为“Wi-Fi”):

禁用该设备上的IPv6(在本例中为“Wi-Fi”):

networksetup -setv6off Wi-Fi

最初的回答:

运行composer ...

您可以使用以下命令重新启用IPv6:

networksetup -setv6automatic Wi-Fi

话虽如此,如果这解决了你的问题,请与你的ISP联系以尝试解决路由错误。这是为每个人解决问题的最佳方法。

希望能对你有所帮助!


注:Original Answer翻译成"最初的回答"

0
根据上述想法,我创建了一个shell脚本,用于为composer创建代理环境。
#!/bin/bash
export HTTP_PROXY=http://127.0.0.1:8888/
export HTTPS_PROXY=http://127.0.0.1:8888/
zsh # you can alse use bash or other shell

这段代码位于名为~/bin/proxy_mode_shell的文件中,它将在需要代理时创建一个新的zsh shell实例。更新完成后,您可以简单地按下Ctrl+D键退出代理模式。

如果无法直接运行proxy_mode_shell,请在~/.bashrc~/.zshrc中添加export PATH=~/bin:$PATH


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接