让wget缓存DNS解析结果

让wget缓存DNS解析结果

我正在使用wget脚本从中下载更改的文件Dropbox

wget -4 -O filename.ext "https://www.dropbox.com/s/<fixed-hash-id>/filename.ext?dl=1"

我注意到wget解析了 的 IP 地址www.dropbox.com,并且它经常变化。

# Note: these examples are from multiple runs of wget, with duplicates removed:

Resolving www.dropbox.com... 108.160.165.139
Resolving www.dropbox.com... 108.160.165.147
Resolving www.dropbox.com... 108.160.165.20
Resolving www.dropbox.com... 108.160.166.13
Resolving www.dropbox.com... 108.160.166.142
Resolving www.dropbox.com... 108.160.166.148
Resolving www.dropbox.com... 108.160.166.20

解析后,wget连接到 IP 地址并发送请求。此时,Dropbox返回状态302 FOUND,并重定向wget到 CDN 服务器,如下所示:

Location: https://dl.dropboxusercontent.com/content_link/<random-generated-hash>?dl=1 [following]

然后,wget将重定向解析为多个 IP 地址,例如:

Resolving dl.dropboxusercontent.com... 54.225.184.81, 107.22.170.202, 54.235.147.68, ...

然后它连接到 IP 地址(按线性顺序尝试),获取200 OK并开始下载文件。

现在的问题是,将主机名解析为 IP 地址通常wget需要一段时间,并且必须重复两次。我尝试通过直接连接到已知 IP 地址之一来加快该过程,但是没有效果。

  • 如果我直接连接到已知的 IP 地址www.dropbox.com,我会获得状态301 Moved Permanently并重定向到带有主机名的 URL(如上所示)。这实际上进一步减慢了进程。

  • 我尝试使用 CDN 服务器的主机名或已知 IP 地址之一直接重用 CDN URL,但它们似乎也重定向(IP 地址到主机名)或简单地拒绝请求(404 Not Found)。

尝试使用 Web 浏览器下载文件时,根本不会出现任何此类 DNS 解析延迟。我该怎么做才能wget缓存 DNS 结果或使用浏览器似乎具有的某种 DNS 缓存?

wget或的替代方案Dropbox欢迎。我试过了curl,但它也受到同样问题的困扰。

相关内容