使用 lftp 镜像多页面站点

Mirror multiple page site with lftp

我需要定期镜像托管在网站上的数据,我正在尝试使用 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 是一个选项并且分页有效 - 我测试过 - 我不想使用它,因为它不太适合这个,因为它浪费了很多时间来获取所有"index.html?param=value" 然后删除它们,考虑到页数,这是不可行的。

lftp 的 mirror 命令的问题在于它在请求页面时向给定的 URL 添加了一个斜线(见下文)。所以它归结为远程端将如何处理 URLs 以及它是否对尾部斜线感到不安。在我的测试中,例如 Drupal 网站不喜欢结尾的斜杠,并且会 return 一个 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 只是 URL 编码字符 ?.