我在网络上使用composer,其中访问互联网的唯一方法是使用HTTP或socks代理。我有http_proxy和https_proxy环境变量。当撰写尝试访问HTTPS URL时,我得到了这个:
file could not be downloaded: failed to open stream: Cannot connect to HTTPS server through proxy
据我所知,连接到https网站的唯一方法是使用连接动词。如何在此代理后面使用composer?
答案 0 :(得分:32)
如果您使用的是Windows,则应设置相同的环境变量,但Windows样式:
set http_proxy=<your_http_proxy:proxy_port>
set https_proxy=<your_https_proxy:proxy_port>
这适用于您当前的cmd.exe。如果您想要更长久地执行此操作,建议您在系统上使用环境变量。
答案 1 :(得分:29)
如果你使用的是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_FULLURI
和HTTPS_PROXY_REQUEST_FULLURI
设置为0
或{{1 }}。
对于阅读此内容的其他人(不是您,因为您说您已经设置了这些内容),请确保使用相同的方法将false
和HTTP_PROXY
设置为正确的代理。如果您使用的是Unix / Linux / OS X,则设置变量名称的大写和小写版本是最完整的方法,因为有些东西只使用小写版本,而IIRC有些使用大写。 (我经常在Windows上使用某种混合环境,Cygwin,我知道同时拥有这两种环境很重要,但纯Unix / Linux环境可能只能使用小写。)
如果在完成所有这些操作后仍然无法正常工作,并且您确定已设置了正确的代理地址,请查看您的公司是否使用Microsoft代理服务器。如果是这样,您可能需要安装Cntlm作为子代理,以连接Composer(等)和Microsoft代理服务器。有关如何设置的更多信息和说明,请访问Google CNTLM。
答案 2 :(得分:7)
试试这个:
export HTTPS_PROXY_REQUEST_FULLURI=false
几个星期前我在一家公司的代理工作后解决了这个问题。
答案 3 :(得分:5)
如果您必须使用凭据,请尝试以下方法:
export HTTP_PROXY="http://username:password@webproxy.com:port"
答案 4 :(得分:4)
这是有效的,这是我的情况......
C:\xampp\htdocs\your_dir>SET HTTP_PROXY="http://192.168.1.103:8080"
替换您的IP和端口
答案 5 :(得分:3)
iconoclast的回答对我不起作用。
我将我的php从5.3。*(xampp 1.7.4)升级到5.5。*(xampp 1.8.3),问题解决了。
首先尝试使用iconoclast的答案,如果它不起作用,那么升级可能会解决问题。
答案 6 :(得分:1)
您可以使用标准HTTP_PROXY
环境变量。只需将其设置为代理的URL即可。许多操作系统已经为您设置了这个变量。
只需导出变量,就不必一直输入它。
export HTTP_PROXY="http://johndoeproxy.cu:8080"
然后你可以正常composer update
。
答案 7 :(得分:1)
插入:
set http_proxy=<proxy>
set https_proxy=<proxy>
前
php "%~dp0composer.phar" %*
或在Linux上插入:
export http_proxy=<proxy>
export https_proxy=<proxy>
前
php "${dir}/composer.phar" "$@"
答案 8 :(得分:1)
操作超时(IPv6问题)# 如果未正确配置IPv6,则可能会出错。常见错误是:
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”):
networksetup -setv6off Wi-Fi
运行作曲家...
您可以通过以下方式再次启用IPv6:
networksetup -setv6automatic Wi-Fi
也就是说,如果这可以解决您的问题,请与您的ISP商讨以解决路由错误。这是让所有人都能解决问题的最佳方法。
希望它对您有帮助!
答案 9 :(得分:0)
根据上述想法,我创建了一个shell脚本,为编写器创建代理环境。
#!/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
即可退出代理模式。
export PATH=~/bin:$PATH
,请将~/.bashrc
添加到~/.zshrc
或proxy_mode_shell
。