如何在HTTP代理的用户名/密码中使用特殊字符?


25

我试图在Windows机器上设置HTTP代理。问题是,密码中有一个特殊字符(@)导致set命令失败。

我试过转义字符(\@)和百分比编码与十六进制值(%40),无济于事。

例如,使用用户名Foo和密码B @ r,我尝试了以下命令:

set http_proxy=http://foo:B\@r@http-gateway.domain.org:80
set http_proxy=http://foo:B%40r@http-gateway.domain.org:80

除了更改密码,我如何让代理使用密码?


集合是否失败或是由于@符号而使用http_proxy环境变量失败的工具?
Mike Cornell

是。因为格式是username:password @ server:port,在密码中间有@会导致密码的右侧被认为是主机名,因此上面的主机名解析失败,因为它认为主机名是r @ http- gateway.domain.org。“r @”不应该在那里。
Philluminati

2
我尝试使用%40并且它有效(在Windows上),你确定吗?
thegreendroid

实际上,它适用于Windows和Linux(Ubuntu)。
thegreendroid

Answers:


25

你必须百分之编码 | 编码特殊字符。例如,而不是这个:

http://foo:B@r@http-gateway.domain.org:80

你写这个:

http://foo:B%40r@http-gateway.domain.org:80

所以@被替换为%40


2
编码确实是解决这个问题的方法(以及许多其他问题)。
HTDutchy 2013年

我发现我需要加倍urlencode一些字符
dovidweisz 2016年

1
我建议只使用javascript encodeURIComponent()来达到这个目的。您可以轻松使用浏览器DeveloperTools -> Console
Mir-Ismaili

2

对于任何特殊字符,请使用十六进制表示法中特殊字符的%Ascii代码。假设我的密码是AB @ 12#,那么密码应设置为

git config --global http.proxy *http://usernamne:**AB%4012%23%26**@myipadress:portnumber*

有关任何数字的十六进制ascii代码的信息,请参阅ascii表。



-1

基于SO的这个答案,您可以尝试使用^来逃避@符号吗?


响应两者,集合成功,它是使用环境变量的工具:set http_proxy=http://foo:B^@r@http-gateway.domain.org:80 jruby -S gem install rake错误:执行gem ...(URI :: InvalidURIError)时,方案http不接受注册表部分:foo:B @ r @ http- gateway.domain.org:80(或错误的主机名?)
pyropenguin 2011年

这是一个基于Linux的问题,而不是基于Windows的问题,使用^对我不起作用。wget: unable to resolve host address 设置代理环境变量后,我仍然得到tf4ce @ server.company.com'`。
Philluminati

1
实际上这是一个基于Windows的问题......我个人认识pyropenguin。
Mike Cornell
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.