我正在尝试执行这样的操作:
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 = STRING
,http_password = STRING
或并从命令行中省略该选项。ftp_password = STRING
~/.wgetrc
WGETRC
--password
答案4
不起作用:
wget ftp://user:[email protected]/file
您可以使用:
wget ftp://user:p\[email protected]/file
请注意‘!’之前的‘\’