2011-06-12 44 views
2

我使用這種方法來獲取Facebook的API數據。只是一個搜索查詢。但我發現使用curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);需要更多的時間在curl時間(超過10+秒)。

有沒有其他curl方法可以跑得更快?

注意:我現在在本地主機測試

$url = "https://graph.facebook.com/search?access_token=".$token."&q=dallas&type=post&scope=publish_stream,offline_access,user_status,read_stream"; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 2); 
//curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__). '/file.crt'); the way as Lumbendil recommend, download a crt file via firefox. still slowly. 
$body= curl_exec($ch); 
curl_close ($ch); 

PS:我不想使用SDK,監守我失敗本地主機測試設置SDK。雖然我已經閱讀了很多關於如何在localhost中設置的文章。我已將http://127.0.0.1/facebook設置爲我的回調網址。但只是失敗。所以我仍然想要一個簡單的捲曲方式。

謝謝。

回答

9

您可以使用.crt文件進行驗證,而不是忽略SSL驗證,as explained here

爲了讓所有的信息在一個地方:在你的代碼,你應該寫:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/crt/file.crt'); 

要獲得證書,你應該與瀏覽器的頁面去,然後用「視圖證書「,你必須導出它。請記住,您必須將其導出爲X.509證書(PEM)才能生效。有關如何導出證書的更詳細指南,請訪問提供的鏈接。

+0

證書變更時,這不會造成麻煩嗎? – zneak 2011-06-12 22:38:16

+0

實際上,如果證書籤名發生更改(這是SSL連接的整個重點),就會造成麻煩,以避免替換URL的用戶。 – Lumbendil 2011-06-12 22:43:29

+0

我的意思是,當Facebook取代它,因爲它已經過期。例如,當前證書將被2013年12月取代。 – zneak 2011-06-12 22:50:49

0

只是一個附註,但如果您確實希望使用SDK,您可以通過編輯您的hosts文件併爲127.0.0.1添加localhost.local來解決本地問題。/etc/hosts以及Windows機器上的C:\ WINDOWS \ system32 \ drivers \ etc \ hosts。

然後在Facebook應用程序設置中,只需將localhost.local設置爲您的域並相應地設置您的網站URL。

你應該準備好去吧。

2

如果忽略檢查證書需要10秒鐘,問題不在於證書或檢查,而且很坦率地說,它可能根本不符合SSL。

與其他SSL握手過程需要多長時間相比,忽略以檢查證書應該非常快速且不可測量。

爲了正確地找出問題,我建議您使用curl命令行工具及其--trace-ascii--trace-time選項來查看哪些內容需要花費時間。您可能需要使用wireshark或類似軟件在網絡上進行探測,才能更好地瞭解發生的情況。

我看不出如何加入證書檢查的混合會使任何事情更快。

+0

你有沒有試過自己的圖搜索?我正在緩慢地解決問題。我不知道由'localhost'造成的緩慢移動,還是移動到真實服務器的速度會更快。 – cj333 2011-06-21 18:13:46

+0

我是libcurl的維護者和主要開發人員,我在很多情況下都使用curl(雖然不是用PHP),但我從未遇到過這種奇怪的情況。 – 2011-06-21 21:12:22

相關問題