是否可以使用curl 或wget 自动获取下载网址?

是否可以使用curl 或wget 自动获取下载网址?

我通常使用 SlackBuilds 为我的 Slackware 构建软件包。我使用 wget 下载源代码,并使用变量。

通过这样的链接,版本更改时没有问题,我把 17.0.1 改为 17.0.1,然后它会自动下载,然后我构建...等等。

VERSION=16.0.1
https://download.java.net/java/GA/jdk${VERSION}/GPL/openjdk-${VERSION}_linux-x64_bin.tar.gz

问题是当 url 中出现一些随机数时,这些随机数会随着每个版本的变化而变化!在此示例中为 7147401fd7354114ac51ef3e1328291f 和 9

VERSION=16.0.1
https://download.java.net/java/GA/jdk${VERSION}/7147401fd7354114ac51ef3e1328291f/9/GPL/openjdk-${VERSION}_linux-x64_bin.tar.gz

我可以使用变量替换,但是有点糟糕,有人知道一种更优雅的方法来在更改时获取新的“随机”数字吗?使用 wget 或curl。

答案1

您可以使用 2wget秒:

  1. wget网站中的 HTML 页面,其中包含可供下载的文件列表。然后提取每个href=....
  2. 筛选那些href与您要查找的内容相匹配的模式。这可能是这样的:
https://download.java.net/java/GA/jdk(*)/*/[0-9]/GPL/openjdk-(*)_linux-x64_bin.tar.gz
  1. 使用捕获组(示例([0-9]+\.[0-9]+):)从每个 URL 中提取版本

  2. 选择您要下载的版本。这可能是最高版本,也可能是与您的变量匹配的版本${VERSION}

  3. wget那个网址


这与uscandebian 使用的工具。 uscan将使用一个名为 的文件debian/watch来完全执行我上面提到的操作,但它通常会识别软件包的最新版本(并通知开发人员他们的软件包之一有可用的更新),或者立即下载它以便开发人员可以导入它进入 debian。

uscan做的还不止这些,包括重命名下载的存档以匹配 debian 中出现的包名称。这取决于现有的一些其他邻近文件,因此uscan可能无法立即为您工作。它至少表明下载索引、解析 href、选择最佳索引和wget-ing 的设计效果非常好。 uscan是一个 Perl 脚本,不太复杂(约 4000 个 sloc,支持许多可以清除的内容),因此您可以根据您的需要进行调整。

相关内容