【问题标题】:User-Agent affects Dropbox shared links downloadUser-Agent 影响 Dropbox 共享链接下载
【发布时间】:2017-02-09 11:05:09
【问题描述】:

我在下载共享链接时偶然发现了一个奇怪的 Dropbox 行为。考虑以下 curl 命令:

curl -H 'User-Agent: curl/7.51.0' -v https://www.dropbox.com/s/nbgs6wqmlqp78sg/demo-pic.jpg\?dl\=0
# ...
# < HTTP/1.1 302 Found
# ....
# < Location: https://dl.dropboxusercontent.com/content_link/yYOt5GIzU8aFEuRve5tI6THhrxlQ8Hq5PCgXmSe6YHM81iKP2SFKlaJCCCSpE9hS/file

这会返回一个 302 重定向,其中包含指向实际图像文件的位置。但是当我更改 User-Agent 时,我得到了不同的结果:

curl -H 'User-Agent: foobar' -v https://www.dropbox.com/s/nbgs6wqmlqp78sg/demo-pic.jpg\?dl\=0
# ...
# < HTTP/1.1 200 OK
# ...

这会从 Dropbox 中返回一个 HTML 页面,其中包含所有登录内容、图片预览等。

很遗憾,我还没有找到这方面的任何文档,以及什么 User-Agent 会返回什么返回状态码。

我的意思是,我可以只设置 User-Agent: curl/7.51.0 并依赖它,但是 Dropbox 需要多长时间才能改变这种行为?

【问题讨论】:

    标签: curl dropbox user-agent


    【解决方案1】:

    Dropbox 可以通过像这样的重定向为某些用户代理提供原始文件内容,例如,对于用户不太可能想要预览页面的 HTML 的 curl。虽然这没有记录或保证,所以我不建议依赖它。

    不过,您可以使用一些记录在案的 URL 参数来管理共享链接的行为:

    https://www.dropbox.com/help/201

    【讨论】:

      【解决方案2】:

      我在尝试使用 Java 从 Dropbox 中提取文件时遇到了同样的问题。它对于 curl 非常有效,但对于 Java 却失败了(而是返回了 HTML 页面)。在我的 Java 应用程序中将 User-Agent 标头设置为 curl/7.54.0 是可行的,但这似乎是一个糟糕的 hack。

      Greg 的answer 中的link 向我指出了解决方案:

      要强制浏览器下载链接的内容而不是显示链接,您可以在 URL 中使用 dl=1 作为查询参数。例如:

      https://www.dropbox.com/s/a1b2c3d4ef5gh6/example.docx?dl=1

      所以我将 URL 中的 dl=0 替换为 dl=1,一切正常——无需更改 User-Agent 标头。仍有 301 和 302 重定向要遵循,但这对于 java.net.HttpURLConnection 和大多数其他库来说不是问题。

      【讨论】:

        猜你喜欢
        • 2014-02-14
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        • 2021-08-25
        • 2019-01-17
        • 2015-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多