我需要定期镜像在网站上托管的数据,我试图使用LFTP(版本4.0.9),因为它通常为此任务做得很好。但是,我正在下载的网站有多个页面(我打算在bash脚本中循环浏览最新的n页,每天将运行几次)。我无法确定如何让LFTP接受页面参数。我没有运气在网上寻找解决方案,到目前为止,我尝试过的事情已经失败。
这很好地工作:
lftp -c 'mirror -v -i "S1A" -P 4 https://qc.sentinel1.eo.esa.int/aux_resorb/'
这不是:
lftp -c 'mirror -v -i "S1A" -P 4 https://qc.sentinel1.eo.esa.int/aux_resorb/?page=2'
它给出了错误:
mirror: Access failed: 404 NOT FOUND (/aux_resorb/?page=2)
我还尝试将新URL作为变量传递,但这也不起作用。我很感激解决这个问题的建议。
在提出建议之前,我知道WGET是一种选择,分页有效 - 我对其进行了测试 - 我不想使用它,因为它不太适合此.html?param = value"然后删除它们,给定页数这是不可行的。
LFTP的mirror
命令的问题是,在请求页面时,它会在给定的URL上添加斜线(请参见下文)。因此,它归结为遥控端如何处理URL以及它是否会因落后的斜线而感到不安。在我的测试中,例如,Drupal网站不喜欢拖延的斜线,并且会返回404,但其他一些网站效果很好。不幸的是,如果您坚持使用LFTP,我将无法找到解决方法。
测试
我尝试了针对Web服务器的以下请求:
1. lftp -c 'mirror -v http://example/path'
2. lftp -c 'mirror -v http://example/path/?page=2'
3. lftp -c 'mirror -v http://example/path/file'
4. lftp -c 'mirror -v http://example/path/file?page=2'
这些命令导致了以下HEAD
Web服务器所看到的请求:
1. HEAD /path/
2. HEAD /path/%3Fpage=2/
3. HEAD /path/file/
4. HEAD /path/file%3Fpage=2/
请注意,请求中总会有一个落后的斜线。%3F
只是URL编码的字符?
。