我想设置一个环境变量,其中包含我的代理服务器的 URL 和我的凭据,如下所示博客文章。
我遇到的问题是我的密码包含一个 at 符号,而我不确定如何正确地对其进行转义:
SET HTTP_PROXY=http://username:p@[email protected]:8080
我该怎么做呢?
顺便说一句,我意识到设置包含我的凭据的环境变量是一个非常糟糕的想法。如果有人有经过身份验证的代理,我愿意接受其他建议,这些建议可以让我在经过身份验证的代理后面使用 Composer。
答案1
set HTTP_PROXY=http://username:p^%[email protected]:8080
- 需要百分比编码
@
密码中的 为,%40
因为@
是分隔符。 - 需要逃脱
%
命令中的set
,这样命令解释器就不会尝试执行环境变量替换。字符^
作为转义字符是一种惯例,早在 IBM/Microsoft 的 OS/2 1.x 中就已存在,并且 Microsoft 的Windows NT 也cmd
支持这种惯例 —cmd
以及命令解释器(如 TCC/LE)- 到今天。
答案2
在 Windows CMD Shell 中,可以使用“^”转义特殊字符。因此:
SET HTTP_PROXY=http://username:p^@assword^@proxy.yourdomain.com:8080
将输出为:
C:\>echo %HTTP_PROXY%
http://username:p@[email protected]:8080
在 shell 上。但这取决于使用变量的工具,我不确定 git 是否正确地将其作为输入(但我认为是这样)。
答案3
我刚刚发现,使用 '%' 是一个更糟糕的噩梦,因为你必须将它转义为 '^%%'命令文件
说,set http_proxy=https://my-user-name:woops-my-password-contains-^%%@windows.sucks.com:8080
>echo %http_proxy%
http_proxy=https://my-user-name:woops-my-password-contains-%@windows.sucks.com:8080