使用 wget --mirror 转义查询字符串

使用 wget --mirror 转义查询字符串

我使用wget --mirror --html-extension --convert-links镜像网站,但最终得到很多格式为 的文件名post.php?id=#.html。当我尝试在浏览器中查看这些文件时,会失败,因为浏览器在加载文件时会忽略查询字符串。有没有办法用?其他字符替换文件名中的字符?


答案--restrict-file-names=windows正确。与标志--convert-links--adjust-extension/ -E(以前名为--html-extension,也可以使用,但已弃用) 结合使用,它会生成一个按预期运行的镜像。

wget  --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example

答案1

查看--restrict-file-names选项。虽然不完全是为了这个特定目的而设计的,但--restrict-file-names=windows可能会对你有所帮助:

--restrict-file-names=模式

更改在生成本地文件名期间必须转义的远程 URL 中的字符。[...]

当给出“windows”时,Wget 会转义字符 \、|、/、:、?、"、*、<、> 以及 0-31 和 128-159 范围内的控制字符。除此之外,Windows 模式下的 Wget 使用 + 而不是 : 来分隔本地文件名中的主机和端口,并使用 @ 而不是 ? 将文件名的查询部分与其余部分分隔开。因此,在 Unix 模式下保存为 www.xemacs.org:4300/search.pl?input=blah 的 URL 在 Windows 模式下将保存为 www.xemacs.org+4300/search.pl@input=blah。

答案2

如果你使用如下 URL,你的浏览器将可以正常显示

file:///tmp/example.com/post.php%3Fid=1.html

代替

file:///tmp/example.com/post.php?id=1.html

注意:如果您在下载文件的内部链接方面遇到问题,那是因为您在下载完成之前终止了 wget。由于您指定了 --convert-links 和 --html-extension(仅在指定时适用),wget 通常会修复链接以使用 %3F 而不是 ?;但是,它会在下载完成后最后执行此操作;如果它被中断,它将不会修复任何链接,您将陷入这种困境。当然,您可以随时编写脚本来检查并修复链接,但是……

答案3

wget 没有修改已保存名称的选项。您可能需要做的是创建一个脚本来遍历并将 ? 替换为 _ 或类似内容。Wget 本身无法做到这一点。

相关内容