2011-02-16 136 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託管的圖像。

相關問題