wget - 我无法下载带有“?”的文件

wget - 我无法下载带有“?”的文件

我想用 wget 下载一些关于 aircrack 的教程,但是失败了:

wget -r 2 http://www.aircrack-ng.org/doku.php\?id=tutorial\&DokuWiki=78e8249415a9ce232228ed8f9f02b9dd 
--2011-10-06 14:16:11--  http://2/
Resolving 2... 0.0.0.2
Connecting to 2|0.0.0.2|:80... failed: Invalid argument.
--2011-10-06 14:16:11--  http://www.aircrack-ng.org/doku.php?id=tutorial&DokuWiki=78e8249415a9ce232228ed8f9f02b9dd
Resolving www.aircrack-ng.org... 213.186.33.2, 2001:41d0:1:1b00:213:186:33:2
Connecting to www.aircrack-ng.org|213.186.33.2|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
www.aircrack-ng.org/doku.php?id=tutorial&DokuWiki=78e8249415a9ce232228ed8f9f02b9dd: Invalid argument

Cannot write to `www.aircrack-ng.org/doku.php?id=tutorial&DokuWiki=78e8249415a9ce232228ed8f9f02b9dd' (Invalid argument).

你知道如何解决这个问题吗?

答案1

这可能是因为您要下载的文件系统不允许文件名中包含“?”。请注意,错误是“无法写入”。

您可以使用--restrict-file-names=windows选项转义名称以兼容 FAT 文件系统。(请注意,wget 执行的不可逆附加%编码实际上与 Web 架构并不正确,但您可能并不关心。)

-O <filename>如果您只下载一个文件,您还可以使用它来指定特定的文件名。

答案2

&通常也会导致问题。请尝试将整个 URL 放在引号中。

答案3

根据建议pjc50,如果 URL 中有特殊字符,请将其放在引号中。因此,您应该尝试:

wget -r 2 'http://www.aircrack-ng.org/doku.php?id=tutorial&DokuWiki=78e8249415a9ce232228ed8f9f02b9dd'

当您不使用引号时,shell 在遇到 时&会假定您想要wget在后台运行该作业。

答案4

查看带有选项的响应标头--append-output=log.txt --server-response

如果Content-Disposition标头存在且指向清晰的文件名,只需使用--content-dispositionwget 中的选项来支持此标头并替换提到的文件名。

当查询字符串(?)的存在导致“无效参数”时,它会派上用场。

相关内容