安全加载Facebook个人资料照片

7

我试图从Facebook上获取用户的个人资料图片,这个过程很顺利,但问题是当你想在一个SSL安全页面中包含它时。我找不到一种方法来从安全位置加载图片。使用以下链接来获取用户的个人资料图片:

https://graph.facebook.com/<FB_ID HERE>/picture?type=square

即使我使用https,页面仍然没有被安全加载(浏览器显示该页面只部分加密)。这并不奇怪,因为链接只是重定向到图片,例如我的个人资料图片:

https://graph.facebook.com/Bazze/picture?type=square

这将获取图片来自于:
http://profile.ak.fbcdn.net/hprofile-ak-snc4/161513_633115680_6792455_q.jpg

请注意,那不是一个安全的位置。
有人知道如何通过https协议安全地加载个人资料图片吗?
谢谢!
7个回答

9

我在这个答案上添加一些内容,以便其他可能会来到这里的人。目前,只需将图像链接从http更改为https即可。一个简单的image_url.sub(/http:/, "https:")就可以了。 - Ashitaka
2
@Ashitaka:看起来Facebook最近已经更改了图形服务器以自动处理http/https。我已经更新了答案。 - josh3736

2

嗯,https://graph.facebook.com/Bazze/picture?type=square 是一个302重定向到http://.... 但注意https://... 仍然有效(示例)。

因此,似乎有一种解决方案是自行解析302,将's'插入到适当的位置,然后获取图像。 但不利的是,上面链接的页面有证书错误,而且没有好的方法来修复它。

(我不是说这是一个答案......)


但是,如果我使用https://graph...(安全)链接包含一张图片,浏览器仍然声称该页面只部分加密(是的,我确定是fb个人资料图片链接导致了这个问题)。 - Bazze
我是说你必须包含一个带有https://profile.ak.fbcdn.net/...的图像,这也需要通过解析302重定向来确定正确的“...”。但是,虽然这将消除“部分加密”的问题,但它会引入证书错误问题。 - Jumbogram

2
  1. 这是一个安全的位置,只是不是一个安全的重定向。
  2. 你能做的就是确保在调用图形API时使用安全请求,之后Facebook会接管通信,没有任何其他操作可以做。

2

根据Open Graph API文档,302重定向将使用您的图片URL。

您需要更改以下内容:

  • 从:/ http profile.ak.fbcdn.net /
  • 到:/ https fbcdn-profile-a.akamaihd.net /
  • 从:/ http static.ak.fbcdn.net /
  • 到:/ https s-static.ak.fbcdn.net /

我真的认为FB应该在他们的API中这样做!!!!


1
你可以通过自己的服务器代理它。设置一个从Facebook获取图片并通过SSL将其返回给您的脚本。
例如:
<?php
    $path=$_GET['path'];
    if (stristr($path, "fbcdn.")==FALSE && stristr($path, "facebook.")==FALSE)
    {
        echo "ERROR";
        exit;
    }
    header("Content-Description: Facebook Proxied File");
    header("Content-Type: image");
    header("Content-Disposition: attachment; filename=".$path);
    @readfile($path);
?>

摘自

http://www.permadi.com/blog/2010/12/loading-facebook-profile-picture-into-flash-swf-using-open-graph-api/

通过 https://yourdomainhere.com/proxy.php?path=URLENCODED-IMG-URI 访问应该通过 SSL 返回用户图片。


这本来可能是一个解决方案,但是Facebook已经修复了这个“漏洞”,所以现在图像是安全地提供的 - 所以我的问题得到了解决。不过还是谢谢你的回答。 - Bazze

-1

-2

使用 ***http***://graph.facebook.com/Bazze/picture?type=square 替代 **https**://graph.facebook.com/Bazze/picture?type=square


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接