【问题标题】:Escape @ character in git proxy password在 git 代理密码中转义 @ 字符
【发布时间】:2011-09-04 14:07:55
【问题描述】:

我将 git 代理配置为 '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


    【解决方案1】:

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

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

    【讨论】:

    • 我正在尝试使用相同的技巧,但使用 'git clone user:pwd%40123@ip:port' 但它不起作用。所以我猜git在这种情况下不使用curl?
    • 有趣...不确定。在这种情况下,可能值得尝试查看实际通过网络发送的内容。
    • 这对我有帮助。您应该分别对名称和密码部分进行 url 编码。这将帮助您避免特殊字符的任何问题。例如,可能有“:”符号也会导致问题。
    • 当您在用户名中包含“@”时,这也很棒,例如当您有电子邮件地址作为用户名时。
    • 非常感谢您在经过两天的努力后解决了我的问题......真的很难找到这种问题的原因。
    【解决方案2】:

    注意(2013 年 11 月)

    对网址进行编码(尤其是密码中的任何特殊字符)是正确的解决方案。
    下面提到的.netrc 仅用于远程repo url,不适用于用于解析远程repo 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 的数据,就像在HTTP 请求中提交HTML form 数据时经常使用的那样。

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

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

    原始答案(2011 年 5 月)

    两个cmets:

    • 为使用 http(不是 https)访问的服务器设置密码是……奇怪。客户端与服务器通信时密码未加密;

    • 您可以在您的$HOME 中设置.netrc(或Windows 的_netrc),内容如下

    机器IP地址:端口 登录用户ID 密码 pwd@

    Git bbehind 使用的 curl 可以很好地处理编码,@ 或没有 @

    【讨论】:

    • 感谢您的回答。服务器是网络驱动器,只有我自己和其他 2 个开发人员会使用。所以我认为不需要加密。有时间我会尝试使用 netrc。
    • @Karthik:这将允许您简单地使用:http://123@ipaddress:port/... 作为克隆地址,而无需添加用户和密码信息。
    【解决方案3】:

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

    List of url codes.

    @ character is %40
    

    在我的 git 配置文件中,我已经“仅”编码了用户名,例如:

    https://myemail%40gmail.com@myrepo.org/api.git

    【讨论】:

      【解决方案4】:

      比如你的密码保存在环境变量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_PASSWORD hello
      2. 将“你好”转换为十六进制:hello x68x65x6Cx6Cx6F
      3. 将每个“x”更改为“%”:x68x65x6Cx6Cx6F %68%65%6C%6C%6F

      【讨论】:

      • 在解释的第一点中,您的意思是使用 $GIT_PASSWORD 而不是 $GIT_REPOSITORY 吗?
      【解决方案5】:

      你必须percent-encode | encode 特殊字符。例如。而不是这个:

      http://user:Pa@s@http-gateway.domain.org:80
      

      你写这个:

      http://user:Pa%40s@http-gateway.domain.org:80
      

      所以@ 被替换为%40

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        • 1970-01-01
        • 2017-07-08
        • 2015-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多