User-Agent影响Dropbox共享链接下载

时间:2017-02-09 11:05:10

标签: curl dropbox user-agent

我在下载共享链接时偶然发现了一个奇怪的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重定向,其中包含实际图像文件的位置。但是当我更改用户代理时,我得到了不同的结果:

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还需要多长时间来改变这种行为?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我尝试使用Java从Dropbox提取文件时遇到了同样的问题。它可以很好地用于curl,但不能用于Java(而是返回HTML页面)。将我的Java应用程序中的User-Agent标头设置为curl/7.54.0是可行的,但这似乎是一个糟糕的黑客。

格雷格(Greg)的link中的answer向我指出了解决方案:

  

要强制浏览器下载链接的内容而不是显示它,您可以在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和大多数其他库来说不是问题。