我正在使用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
,但它也受到同样问题的困扰。