我正在自动化一个需要 HTTP 基本身份验证的网站。
在大多数情况下,此链接中给出的建议就像一个魅力:
您可以在 URL 参数中传递用户/密码以进行 HTTP 基本身份验证吗?
但是,有些用户的密码中有问号 ( ?
)。请告知如何转义问号。
PS我知道@
在用户名中可以转义为%40
.
我正在自动化一个需要 HTTP 基本身份验证的网站。
在大多数情况下,此链接中给出的建议就像一个魅力:
您可以在 URL 参数中传递用户/密码以进行 HTTP 基本身份验证吗?
但是,有些用户的密码中有问号 ( ?
)。请告知如何转义问号。
PS我知道@
在用户名中可以转义为%40
.
我假设您必须引用传递用户凭据的 URL 的userinfo部分,而不是“URL 参数”(它是query-string的一部分):
对于 URL 的任何部分中不允许出现的任何字符(因为它可能具有特殊含义),它必须是 URL 编码 ( percent-encoded )
%
后跟该字符的两位十六进制代码。所以,
@
是%40
和?
是%3F
。但这些并不是唯一可能需要 URL 编码的两个字符。您应该通过脚本中的 URL 编码函数传递值,以正确地对 URL 的该部分进行 URL 编码。
RFC 3986定义了 URL 的userinfo部分中允许(未编码)的字符:
因此,其他所有内容都必须进行百分比编码,包括
:
和%
- 如果它们是用户或密码部分的一部分(为了否定那里的特殊含义)。在同一份文件中也有说明:
因此,浏览器支持不完整,版本不断更新(安全性是主要问题)。我相信最新版本的 Chrome(经过测试的 v79)和 Firefox 确实支持 URL 中的用户凭据。我已经看到评论说这也适用于最新的 Safari(?),虽然这已经很久没有工作了,而且它目前对我不起作用(虽然我没有在 iOS 12.4.1 上运行最新的)。几年前,IE 放弃了对 URL 中用户名和密码的支持,而且看起来它不会回来了。