在 wget 的密码参数中转义 !

在 wget 的密码参数中转义 !

我正在尝试执行这样的操作:

wget --user=foo --password=bar! url

密码中的 ! 造成了问题。我尝试使用 \ 进行转义,如下所示

--password=bar\!

我尝试过用单引号和双引号括起来。我把密码放在一个单独的文件中,然后尝试

--密码=cat pass.txt

每次我都会收到 403 Forbidden。使用 -d,我看到 SSL 握手成功。在 Windows 命令行上,该命令有效。我的假设是我需要以不同的方式转义 !,但我不知道还有什么其他方法。

答案1

尝试使用引号:

--password="bar\!"或者--password='bar\!'

服务器端的错误是什么?

更新: 我在运行 Apache 2.2.14 的 Ubuntu 10.4 机器上运行了测试。wget --user=foo --password=bar! url对我有用。

如果我使用错误的密码,我会收到类似的错误user foo: authentication failure for "/directorytest/": Password Mismatch

再次更新:(退一步)

你说这个错误是“服务器配置拒绝客户端”。我浏览了 Apache 源代码,这个错误信息来自mod_authz_host。这表明您的问题不在于密码(即身份验证),而是您的客户端主机无权访问此 Apache 资源。mod_authz_host 处理主机名和 IP。

上面,您说“在 Windows 命令行上,该命令有效”。您的所有测试都来自同一个客户端系统吗?您是否在同一个 Windows 系统上运行“wget”?如果您尝试使用 IE 或 Firefox 访问同一个 URL,会发生什么?

更多讨论这里这里

答案2

尝试%21,它是 的URL编码值!

答案3

尝试set +H关闭 Bash 的历史扩展。

编辑:

尝试在您的文件或环境变量指向的文件中设置password = STRINGhttp_password = STRING或并从命令行中省略该选项。ftp_password = STRING~/.wgetrcWGETRC--password

答案4

不起作用:

wget ftp://user:[email protected]/file

您可以使用:

wget ftp://user:p\[email protected]/file

请注意‘!’之前的‘\’

相关内容