我正在使用以下代码下载 pdf 文件列表:
wget -i list.txt -A .pdf
有些 pdf 文件可以正常下载。但是,有些 pdf 文件无法正常下载。当我检查日志时,我看到以下报告:
--2013-04-09 11:25:42-- http://amazon.com/111.pdf
Reusing existing connection to amazon.com:80.
HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9
Length: unspecified
Saving to: `111.pdf'
[ <=> ] 1,045 --.-K/s in 2m 9s
2013-04-09 11:27:51 (8.11 B/s) - Read error at byte 1045 (Connection reset by peer).Retrying.
--2013-04-09 11:27:52-- (try: 2) http://amazon.com/111.pdf
Connecting to amazon.com (amazon.com)|00.00.55.888|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2680728 (2.6M) [application/pdf]
Saving to: `111.pdf'
61% [==============================> ] 1,649,221 10.0K/s in 2m 41s
2013-04-09 11:30:41 (10.0 KB/s) - Read error at byte 1649221/2680728 (Connection reset by peer). Retrying.
--2013-04-09 11:30:43-- (try: 3) http://amazon.com/111.pdf
Connecting to amazon.com (amazon.com)|00.00.55.888|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2680728 (2.6M) [application/pdf]
Saving to: `111.pdf'
100%[==================================================>] 2,680,728 10.1K/s in 4m 22s
2013-04-09 11:35:11 (10.0 KB/s) - `111.pdf' saved [2680728/2680728]
请问为什么我打不开pdf文件111.pdf?上面显示下载100%,是不是因为对方重置了连接?
我想知道是否可以将 wget 放入每个文件的循环中,这样它就不会退出循环,直到下载完成且没有错误?我发现了以下循环,但是它给出了错误。代码和错误如下所示:
代码:
while read -r link
do
wget -A .pdf
until [ $? = 0 ]
do
wget -A .pdf
done
done < ./list.txt
错误:
Try `wget --help' for more options.
wget: missing URL
Usage: wget [OPTION]... [URL]...
我在 Windows 上使用 Cygwin。
如果您还有其他建议,请告诉我。
感谢您的帮助。
答案1
关闭的连接
对端已关闭连接通常意味着目标机器(或跟踪路由上的任何其他机器)故意关闭了连接。
结合您的浏览器中下载运行良好的事实,我怀疑服务器配置为禁止或减慢批量下载和/或下载器的速度。
文件损坏
第一次尝试时,只下载了 1,045 个文件,并且文件头显示文件长度未指定。我怀疑文件的第一部分实际上是某种错误消息(例如,您必须在两次下载之间等待 X 秒)。
可能的解决方案
欺骗主流浏览器的用户代理:
--user-agent "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Ubuntu Chromium/25.0.1364.160 Chrome/25.0.1364.160 Safari/537.22"
在两次下载之间设置合理或随机的等待时间:
--wait=15 --random-wait