使用 curl 通过共享链接(不是公共链接)下载 Dropbox 文件夹

Posted

技术标签:

【中文标题】使用 curl 通过共享链接(不是公共链接)下载 Dropbox 文件夹【英文标题】:Use curl to download a Dropbox folder via shared link (not public link) 【发布时间】:2014-02-14 20:28:59 【问题描述】:

Dropbox 使通过 curl 以编程方式下载单个文件变得容易(例如:curl -O https://dl.dropboxusercontent.com/s/file.ext)。文件夹(常规目录文件夹,未压缩)有点棘手。与文件相反,文件夹的共享链接不直接链接到压缩文件夹(Dropbox 会在下载文件夹之前自动压缩文件夹)。看来您可以将?dl=1 添加到链接的末尾,因为这将直接在浏览器中开始下载。但是,这指向一个中间 html 文档,该文档重定向到实际的 zip 文件夹,并且似乎不适用于 curl。无论如何使用 curl 通过共享链接下载文件夹?我意识到最好的解决方案是使用 Dropbox api,但对于这个项目来说,保持它尽可能简单很重要。此外,该解决方案必须合并到 bash shell 脚本中。

【问题讨论】:

【参考方案1】:

使用-L 选项似乎可以使用 curl。这会强制 curl 跟随重定向。此外,指定带有 .zip 扩展名的输出名称也很重要,因为默认情况下将是一个没有扩展名的随机字母数字名称。最后,不要忘记在链接末尾添加?dl=1。没有它,curl 将永远无法到达重定向页面。

curl -L -o newName.zip https://www.dropbox.com/sh/[folderLink]?dl=1

【讨论】:

不错的提示+1,我好久没有查看dropbox api了,真的不知道你可以下载整个文件夹。仅仅因为你是南加州大学的粉丝,我几乎对此投了反对票。 :D(亚利桑那野猫队 = #1!) 您不需要指定输出名称。您可以,但您也可以保留 Dropbox 发送的远程文件名或文件夹名称。看我的回答。 那个该死的-L,伙计们……这很重要。 不需要 .zip 我的朋友,我可以这样做: curl -L -o file_name.anyextension dropbox.com/sh/[folderLink]?dl=1【参考方案2】:

    关注重定向(使用-L)。您的直接问题是 Curl 没有遵循重定向。

    设置文件名。 (可选)

Dropbox 已经发送了一个 Content-Disposition Header 及其 Dropbox 文件名。如果您使用正确的 curl 标志,则没有理由指定文件名。 相反,您可以使用您选择的名称来强制使用文件名。

使用以下命令之一:

curl https://www.dropbox.com/sh/AAbbCCEeFF123?dl=1 -O -J -L

保留/写入远程文件名 (-O,-J) 并遵循任何重定向 (-L)。

同一行适用于单独共享的文件或整个文件夹。 文件夹将自动保存为.zip(基于文件夹名称)。 不要忘记将参数 ?dl=0 更改为 ?dl=1(参见 cmets)。

或者:

curl https://www.dropbox.com/sh/AAbbCCEeFF123?dl=1 -L -o [filename]

关注任何重定向 (-L) 并设置您选择的文件名 (-o)。


注意:一般使用-J 标志:

警告:谨慎使用此选项,尤其是在 Windows 上。流氓服务器可能会向您发送可能由 Windows 或某些第三方软件自动加载的 DLL 或其他文件的名称。

更多信息请咨询:https://curl.haxx.se/docs/manpage.html#OPTIONS(参见:-O、-J、-L、-o)。

【讨论】:

谢谢并同意。刚刚测试过了。但是,它并没有用..现在保持原样。

以上是关于使用 curl 通过共享链接(不是公共链接)下载 Dropbox 文件夹的主要内容,如果未能解决你的问题,请参考以下文章

从保管箱通过c ++中的curl下载文件

共享主机中的 Laravel 存储链接

Google Play 开放测试链接共享出现错误

是否可以添加链接以下载只能通过在 Facebook 上共享才能下载的文件?

如何获取谷歌电子表格的共享链接?

Autodesk forge 场景链接下载无法解压