如何使用密码中的特殊字符设置http/https代理

时间:2020-01-09 10:41:38  来源:igfitidea点击:

在本教程中,当用户名或者密码包含逗号,@等特殊字符时,将介绍设置http_proxy或者https_proxy的步骤。

错误:无法使用用户名或者密码中的特殊字符设置http_proxy或者https_proxy

通常,在导出http_proxy或者https_proxy时,我们应该提供用户名和密码以及代理IP和端口。
在大多数情况下都可以使用,但是如果用户名或者密码包含一些特殊字符,那么我们可能会得到

Resolving s... failed: Name or service not known.
        wget: unable to resolve host address “s”

错误输出可能会有所不同,具体取决于用户名或者密码中涉及的字符。
有两种方法可以解决此错误:

解决方案1:将文本转换为十六进制unicode

我们必须在代理用户名和密码中使用各个特殊字符的映射十六进制unicode值。
要获取映射Unicode字符的列表,请遵循https://unicodelookup.com/

例如,可以将密码P @ $$//0转换为

P  P  <-- No lookup required
@  0x40
$ 0x24
$ 0x24
\  0x5C
/ 0x2F
\  0x5C
/ 0x2F
0  0  <-- No lookup required
,  0x2C
#  0x23

因此,如果将其组合为P @ $$//0,则得到P0x400x240x5C0x2F0x5C0x2F00x2C0x23

现在我们可以导出http_proxy了:

# export http_proxy="http://username:P0x400x240x5C0x2F0x5C0x2F00x2C0x23@server:port/"

与导出https_proxy类似

# export https_proxy="https://username:P0x400x240x5C0x2F0x5C0x2F00x2C0x23@server:port/"

解决方案2:使用wget提供用户名和密码

除了进行转换外,我们还可以使用wget命令以纯文本格式提供用户名和密码。

# wget -e use_proxy=yes -e https_proxy=10.xx.xx.xx:8080 --proxy-user='user' --proxy-password='P@$$\/\/0,#' https://domain.com/file

在wget的手册页中:

--proxy-user=user
--proxy-password=password
           Specify the username user and password password for authentication on a proxy server.  Wget will encode them
           using the "basic" authentication scheme.

仅当我们计划使用wget或者要应用系统范围的代理时,此解决方案才有效。
我们可以使用解决方案1,其中用户名或者密码具有任何特殊字符。