Facebook照片获取参数和照片可用多长时间



当我从Facebook请求照片时,一些url是这样的:

https://{hidden_for_privacy}79141548_n.jpg

还有一些是这样的:

https://{hidden_for_privacy}23364315_n.jpg?oh=c566c56ca9fd7eb1ed5d8bfca4255e84&oe=544AF123&__gda__=1414682395_6d2cb778f5b2c857d1be1c781e81cdfa

第二个有一些额外的GET参数(oh, oe和__gda__(空格是为了防止加粗)。

当这些参数存在时,图像将在几天后无效,因为这些值将不同(您可以通过执行新的API调用来检查这一点以获得相同的照片)。

这些参数是什么意思,它们是如何与最大时间框架联系在一起的?

谢谢!

我知道一些历史和它的目的。

原来的facebook图片url是这样的
https://{*剪掉*}/XXXXXXXXXXX_b.jpg
但是有很多大小的图像可用所以人们可以访问缩略图图像只需将后缀_b替换为_n
(现在是https://{*snipped*}/XXXXXXXXXXX_n.jpg)
以访问图像的较大版本(如果可用)。

一段时间后,facebook实现了中央图像系统,可以根据要求动态裁剪和调整图像的大小。
此时,facebook提供的url可能如下所示:
https://{*剪掉*}.fbcdn.net/hprofile-xxx1/v/t1.0-1/p32x32/12345678_123412341234123_4123412341234123412_n.jpg
当人们看到这个网址时,他们的好奇心就会升起。

让我们尝试从url中删除一些参数。
https://{*剪掉*}.fbcdn.net/hprofile-xxx1/v/12345678_123412341234123_4123412341234123412_n.jpg
他们得到的是他们能从facebook服务器上得到的最大、最完整的图片。

这个方法已经有效了很长时间。
当人们在他们的电子邮件中看到图像(主要是个人资料图片)时,他们甚至无需登录facebook就可以获得完整版本的图像。它在任何地方都能工作,包括私人头像。

快速修复和最便宜的解决方案为facebook签名请求路径与一些签名算法。
我猜他们使用HMAC作为核心算法,并从包括请求路径在内的各种来源获得HMAC输入。这将确保只有拥有HMAC密钥的一方才能生成有效的url。(大概只是facebook)

现在旧的问题被修复了,你不能再使用它了,但有不止一个问题可以通过添加MAC来修复。

表示对图像的访问无效。
假设人们曾经发布过他们的照片(现在其他人可以同时拥有有效的请求路径和来自facebook的签名),后来他们改变了主意,将照片设为私有。

但是,具有有效url和签名的人仍然可以从facebook服务器获取图像。
为了用超级便宜的资源解决这个问题,他们已经实现了HMAC计算。
(为了掩盖这样一个事实:当你删除你的照片时,facebook实际上并没有从他们的系统中删除你的照片。)
他们决定将时间戳的值混合到HMAC的输入中。
(类似用法见RFC-6238)

因此,需要定期从facebook上刷新签名才能访问照片。
这用非常便宜的额外资源解决了后一个问题。

给你。
facebook参数背后的一些历史和基本原理。

我敢肯定没有关于时间框架的官方文件,但你自己做一些实验应该不难,因为现在你知道你想要的时间框架的价值是固定的和可预测的。

我认为它们是facebook图像会话密钥,它们由facebook在每个图像显示上产生。因此,facebook服务器认为对图片的请求是允许的,并且是facebook自己知道的。

对不起,我的英语不好,我的肤浅的评论,但我认为这个问题的解决方案可能是,获取一个新的url图像会话时,旧的一个过期。或者我不知道你的整个系统,但也许你可以直接连接到facebook的assign-keys-for-images机制,并获得所有新鲜的链接。

如果我对这些参数的工作机制的目的是正确的,我认为没有第二个解决方案。对不起,我的英语又不好了。

我终于找到了答案。关键是这些照片不是公开的。如果你通过API请求一张私人照片,他们会添加一个查询字符串,这样url在一段时间后就不再有效了。因此,这张照片仍然有点"私密"。这个功能是可以理解的,除了将图像下载到其他地方之外,没有其他解决方案。

最新更新