git代理密码中的转义@字符

问题描述 投票:73回答:6

我将git proxy配置为'http.proxy = http:// userId:pwd @ 123 @ipaddress:port',但是在克隆远程项目时,我得到的错误为

Cloning into git...
error: Couldn't resolve proxy '123@ipaddress' while accessing http://git.kernel.org/pub/scm/git/git.git/info/refs

fatal: HTTP request failed

如何转义密码中的'@'字符?

请注意:我无法更改密码。

git msysgit
6个回答
135
投票

如果您在代理URL中传递密码,我会尝试使用@符号的URL编码值:

http.proxy=http://userId:pwd%40123@ipaddress:port

56
投票

注意(2013年11月)

对URL进行编码(尤其是密码中的任何特殊字符)是正确的解决方案。下面提到的.netrc仅适用于远程回购URL,不适用于用于解析所述远程回购URL的代理。

有关所述编码,请参见“ Percent-encoding”:

百分比编码,也称为URL encoding,是在某些情况下用于在Uniform Resource Identifier(URI)中编码信息的机制。尽管它被称为URL编码,但实际上更普遍地在主要的Uniform Resource Identifier(URI)集内使用,它既包含Uniform Resource Locator(URL),又包含Uniform Resource Name(URN)。因此,它也用于准备应用程序/ x-www-form-urlencoded media type的数据,这在HTML请求中提交form HTTP数据时经常使用。

百分比编码后保留的字符:

!   #   $    &   '   (   )   *   +   ,   /   :   ;   =   ?   @   [   ]
%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D

原始答案(2011年5月)

两个评论:

  • 拥有使用http(不是https)访问的服务器的密码很奇怪。客户端和服务器之间的通信期间未加密密码;

  • 您可以在.netrc中设置_netrc(对于Windows为$HOME,带有以下内容

机器ipaddress:port登录用户名密码pwd @

[Git bbehind场景使用的卷曲将很好地处理编码,@或否@


5
投票

URL编码任何不寻常的字符。

List of url codes.

@ character is %40

在我的git配置文件中,我已经编码了'只是'例如用户名:

https://myemail%[email protected]/api.git

2
投票

例如,您的密码存储在环境变量GIT_PASSWORD中,用户名-GIT_USERNAME,然后:

git clone http://${GIT_USERNAME}:$(echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %)@repository.git

说明:echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. 打印密码:$GIT_REPOSITORY hello
  2. 将'hello'转换为十六进制:hello x68x65x6Cx6Cx6F
  3. 将每个“ x”更改为“%”:x68x65x6Cx6Cx6F %68%65%6C%6C%6F

1
投票

您必须percent-encode | encode特殊字符。例如。代替这个:

http://foo:B@[email protected]:80

您写此:

http://foo:B%[email protected]:80

因此@被替换为%40


0
投票

如果我的密码以@@结尾我尝试@@@ proxy.com,%40%40 @ proxy.com也不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.