Bash 使用lftp镜像多页站点

Bash 使用lftp镜像多页站点,bash,lftp,Bash,Lftp,我需要定期镜像网站上托管的数据,我正在尝试使用lftp(版本4.0.9),因为它通常能很好地完成此任务。但是,我下载的站点有多个页面(我打算在一个bash脚本中循环最近的n个页面,该脚本将一天运行几次)。我无法确定如何让lftp接受page参数。我在网上搜索解决方案时运气不好,我尝试的方法到目前为止都失败了 这非常有效: lftp -c 'mirror -v -i "S1A" -P 4 https://qc.sentinel1.eo.esa.int/aux_resorb/' 这并不是: lft

我需要定期镜像网站上托管的数据,我正在尝试使用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)
我还尝试将新URL作为变量传入,但也没有成功。我非常感谢您提出解决这个问题的建议


在建议之前,我知道wget是一个选项,分页是有效的-我测试过它-我不想使用它,因为它不太合适,因为它会浪费大量时间获取所有“index.html?param=value”,然后删除它们,鉴于页面数量,这是不可行的。

lftp的
mirror
命令的问题在于,它在请求页面时会在给定URL中添加斜杠(请参见下文)。因此,它总结了远程端将如何处理URL,以及它是否会对尾部斜杠感到不安。在我的测试中,例如Drupal站点不喜欢尾部斜杠,将返回404,但其他一些站点运行良好。不幸的是,如果您坚持使用lftp,我无法找到解决方法

测验 我对web服务器尝试了以下请求:

1. HEAD /path/
2. HEAD /path/%3Fpage=2/
3. HEAD /path/file/
4. HEAD /path/file%3Fpage=2/
1。lftp-c'镜像-vhttp://example/path'
2.lftp-c'镜像-vhttp://example/path/?page=2'
3.lftp-c'镜像-vhttp://example/path/file'
4.lftp-c'镜像-vhttp://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编码的字符

啊-这很烦人。我甚至可以在浏览器中看到,如果添加了斜杠,它只是默认为第一页,因此无法正确处理。我将标记您的答案,因为虽然不是解决方案,但您已经解释了为什么它不起作用。简单的解决方案就到此为止,我想我必须从html中提取我想要的链接。非常感谢。