2012-04-16 53 views
-1

正如您在代碼中看到的,我試圖執行FQL查詢並檢索結果。我生成的查詢完全正確,因爲我已通過瀏覽器對其進行了測試。我首先使用file_get_contents()來檢索網頁,但它給我一個400錯誤的請求錯誤。有人建議使用cURL。PHP cURL不提取網頁

下面給出的代碼段給我false爲$查詢。如果我取消註釋urlencode()行,則腳本會一直點亮並達到最大執行時間限制。我究竟做錯了什麼?

$limit = $start + 100; 
    $query = "select post_id, created_time, actor_id, message, attachment, comments, likes, type from stream where source_id = $id limit $start, ". $limit; 
    $url = "https://graph.facebook.com/fql?q=$query&access_token=$token"; 
    //$url = urlencode($url); 
    echo $url.'<br>'; 
    $curl_handle=curl_init(); 
    curl_setopt($curl_handle, CURLOPT_URL, $url); 
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl_handle, CURLOPT_PROXY, "tcp://10.3.3.3:8080"); 
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Hi!'); 
    $query = curl_exec($curl_handle); 
    var_dump($query); 
    curl_close($curl_handle); 

編輯:訪問另一個URL的file_get_contents給了我這個錯誤「未能打開流:無法通過代理連接到HTTPS服務器」。由於這也是HTTPS,cURL也可能面臨同樣的問題。我認爲這可能會導致一個答案。

回答

0

對於初學者,您在轉儲它之前重新使用$query變量。

二,在你的(第一)$query變量上使用urlencode。 (Facebook的$令牌不需要URL編碼)


編輯(不評論內部適應)

我只是嘗試這樣做我自己:

<? 
    $token = $_GET["token"]; 
    $id = $_GET["id"]; 
    $start = 0; 
    $limit = $start + 100; 
    $query = urlencode("select post_id, created_time, actor_id, message, attachment, comments, likes, type from stream where source_id = $id limit $start, ". $limit); 
    $url = "https://graph.facebook.com/fql?q=$query&access_token=$token"; 

    echo $url.'<br>'; 
    $curl_handle=curl_init(); 
    curl_setopt($curl_handle, CURLOPT_URL, $url); 
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 

    $curlres = curl_exec($curl_handle); 
    var_dump($query); 
    print "\n\n"; 
    var_dump($curlres); 
    curl_close($curl_handle); 
?> 

該作品沒有什麼問題。 PM我,如果你想嘗試這個,我會給你的網址。我不是舒適與釋放到野外這個.. Pherhaps來源是代理..


編輯

仙到底是什麼..發瘋! ;)

http://hal.su/on/fbCurlTest.php?token=the%20token&id=the%id&start=0

更換%20token與您的令牌,並與您的ID替換%20id。

+0

確實重用$ query有什麼危害嗎?嘗試了你的第二個建議。沒有工作 – wirate 2012-04-16 16:31:26

+0

不,它沒有。儘量保持這一點儘可能簡單。你真的需要'curl_setopt($ curl_handle,CURLOPT_USERAGENT,'嗨​​!');'? – micha 2012-04-16 16:37:51

+0

Facebook的'$ token'目前不**需要URL編碼,但如果將來更改其格式,則不會因此而受傷。我總是在使用Facebook的API時謹慎行事。 – ceejayoz 2012-04-16 16:39:45

1

您應該是urlencode ing $query$token,而不是整個URL。

$url = "https://graph.facebook.com/fql?q=" . urlencode($query) . "&access_token=" . urlencode($token); 
+0

https://graph.facebook.com/fql?q=select+post_id%2C+created_time%2C+actor_id%2C+message%2C+attachment%2C+comments%2C+likes%2C+type++ from + stream + where + source_id +%3D + 50245567013 + limit + 200%2C + 300&access_token = [令牌隱藏]這是url,如果我使用urlencode()$ query和$ token。結果仍爲布爾值false – wirate 2012-04-16 16:29:43

+0

您確定您的代理正在運行嗎?你爲什麼使用一個?這也可能是您的自定義用戶代理不被喜歡。 – ceejayoz 2012-04-16 16:40:36

+0

我使用代理服務器後面的網頁。是的,我確定它正在工作。我完全刪除了用戶代理調用 – wirate 2012-04-16 16:43:16