2011-02-16 89 views
7

我正在尝试包含来自Facebook的用户个人资料图片,该图片效果不错,但是当您希望将其包含在受SSL保护的页面中时,情况就是如此。我找不到从安全位置加载图片的方法。使用下面的链接到用户的个人资料图:安全地加载Facebook资料图片

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 

请注意,这不是一个安全的位置。

任何人都知道如何通过协议安全地加载配置文件图片?

谢谢!

回答

2
  1. 这是一个安全的地方,它只是没有一个安全的重定向
  2. 所有你能做的是确保你在调用图表api时使用安全请求,此后Facebook将接管通信并且没有任何可以完成。
2

嘛,https://graph.facebook.com/Bazze/picture?type=square是302重定向到HTTP:// ......但是请注意,HTTPS:// ...仍然有效(example)。

所以它看起来像一个解决方案是自己解析302,插入's'在适当的地方,然后获取图像。但缺点是,上面的链接页面有证书错误,并没有一个好方法来解决这个问题。

(我并不是说这是一个很好的答案 ...)

+0

但是,如果我有以https图像:// ...图(安全)的浏览器仍然声称页面仅部分加密(是的,我敢肯定,这是FB资料图片链接这是造成它)。 – Bazze 2011-02-16 22:16:55

+0

我在说你必须包含一个https://profile.ak.fbcdn.net/...的图片,这也需要通过解析302重定向来确定正确的“...”。但尽管这样可以消除'部分加密'问题,但它会引入证书错误问题。 – Jumbogram 2011-02-16 23:44:42

2

302重定向将具有您的图片网址,如Open Graph API文档中所述。

的,你需要从改变: /HTTP profile.ak.fbcdn.net/ 到: /HTTPS fbcdn-profile-a.akamaihd.net/

而且从:/ HTTP static.ak .fbcdn.net/to:/ https s-static.ak.fbcdn.net/

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

-2

使用***http***://graph.facebook.com/Bazze/picture?type=square而不是**https**://graph.facebook.com/Bazze/picture?type=square

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返回userpic。

+0

这可能是一个解决方案,但Facebook已经解决了这个“错误”,所以图像现在安全地服务 - 所以我的问题得到解决。但感谢您的答案。 – Bazze 2011-12-17 19:54:44

9

Add return_ssl_resources=1到您的通话图表:

https://graph.facebook.com/<FB_ID>/picture?type=square&return_ssl_resources=1 

这是获得SSL停图像的正确方法;重定向将发送到具有正确SSL证书的https服务器。


更新:看来当您使用https://graph.facebook.com的Facebook现在会自动给你一个重定向到HTTPS托管图像,所以return_ssl_resources参数不再是必需的。

使用http://graph.facebook.com仍然为您提供http托管的图像。

相关问题