我需要定期镜像托管在网站上的数据,我正在尝试使用lftp(版本4.0.9),因为它通常可以很好地完成这项任务。但是我下载的网站有多个页面(我打算在bash脚本中循环遍历最近的n个页面,每天会运行几次)。我无法弄清楚如何让lftp接受page参数。我在网上搜索解决方案没有运气,到目前为止,我所尝试的方法都失败了。
这非常有效:
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)
我也尝试将新网址作为变量传递,但也没有用。我很感激能够解决这个问题。
在建议之前,我知道wget是一个选项,分页工作 - 我测试了它 - 我不想使用它,因为它不太合适,因为它浪费了很多时间来获取所有" index.html的PARAM =值"然后删除它们,给定页面数量这是不可行的。
答案 0 :(得分:1)
lftp的mirror
命令的问题在于它在请求页面时向给定的URL添加斜杠(见下文)。因此,它归结了远程端将如何处理URL以及它是否会对尾随斜杠感到不安。在我的测试中,Drupal站点例如不喜欢尾部斜杠并且将返回404但是其他一些站点工作正常。不幸的是,如果你坚持使用lftp,我无法找到解决方法。
我针对网络服务器尝试了以下请求:
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'
这些命令导致Web服务器看到以下HEAD
个请求:
1. HEAD /path/
2. HEAD /path/%3Fpage=2/
3. HEAD /path/file/
4. HEAD /path/file%3Fpage=2/
请注意,请求中始终存在尾部斜杠。 %3F
只是网址编码的字符?
。