2012-06-02 92 views
3

的file_get_contents不與下面的網址工作的工作(未能打開流:HTTP請求失敗HTTP/1.0 400錯誤的請求)的file_get_contents不與facebook圖形API

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=235326466577139&redirect_uri=http%3A%2F%2Fapps.facebook.com%2Flikeablephotos%2F&client_secret=CLIENT_SECRET&code=AQDFZbjpAUda8c_gz4wDDuBOVrsn0dApz3s8UA--7hFQIi1wb70-tDE56xXcCtDq-hV5UWzR5YEw_ozuGT24FLfvh9KnqHZ3xdn46P_KxYCf3DHJQA3AAu2ICHBqTk1-6fHTsl6FbagKz83H6dn15kkbKksajA4KcVIoPse5JbuBLlh6V5L1ANe8fzR94iH_SMU";

$response = file_get_contents($token_url); 

,但如果你複製並粘貼上面的網址到瀏覽器地址欄中它工作得很好!返回:

access_token=AAADWBzZAyUvMBAL2Th6CRtxh2Up5soTCK8N4HJcy0ZBhQgJPxtZArKbuITISMoGLDxNiyeNW4GUZCBvJPeBTH6mx4v83ueUIAAYQJA1WrAZDZD&expires=5112501 

但他類似的URL(對於不同的用戶),也可以工作:

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=235326466577139&redirect_uri=http%3A%2F%2Fapps.facebook.com%2Flikeablephotos%2F&client_secret=CLIENT_SECRET&code=AQC2kTEV96-1Cki2oYUhyzjH6yFe6AJRd1Q3G8fbUXW-IsLJUlactzSwCvGVBK6jh1tL-t7v6dOWJZzbkSYhk0n2z6BHQcpljWAdoXFGB5zLC4FgW8fmxT6hwdRIQOr2dZ95CD_q5yJuOUz_2DItUa3_FF9m2_TmFYGEbxPoiaF47YSTUuZp6g-8ffziJcKDAdo"; 

使用file_get_contents

時,請幫忙,謝謝

+0

這是一個古老的話題,但我也遇到了這個問題,並以這種方式解決它:託管關閉https包裝,所以我必須啓用php_openssl –

+0

cURL可以處理HTTPS沒有問題,而'file_get_contents )'在某些情況下可能不起作用。 – Raptor

回答

2

作爲一種替代的file_get_contents你有沒有考慮過使用cURL。我使用curl處理大量的請求並獲得很好的結果,如果失敗,它不會泄露您的客戶機密。

http://php.net/manual/en/book.curl.php

此代碼段是我所有的應用來獲取應用程序的訪問令牌的標準。可以用於所有的api調用。


$app_access_token = GetCH(); 
function GetCH(){ 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
if(substr($url,0,8)=='https://'){ 
    // The following ensures SSL always works. A little detail: 
    // SSL does two things at once: 
    // 1. it encrypts communication 
    // 2. it ensures the target party is who it claims to be. 
    // In short, if the following code is allowed, CURL won't check if the 
    // certificate is known and valid, however, it still encrypts communication. 
    curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY); 
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 
} 
$sendCH = curl_exec($ch); 
curl_close($ch); 
return $sendCH; 
}; 
+0

感謝您的回答,我一直在玩curl,但無法讓它與給我不良要求的網址一起工作,我剛剛嘗試了您的網址代碼,但它也無法使用,但返回: –

+0

感謝@Shawn E Carter爲你的答案,我一直在玩curl,但無法讓它與給我不良請求的網址一起工作,我剛剛嘗試了你的代碼,並且它的確如此不工作,但返回:{「錯誤」:{「消息」:「錯誤驗證驗證碼。」,「類型」:「OAuthException」,「代碼」:100}}我需要使用原始URL –

+0

續.. 。由於將應用程序重置爲https://graph.facebook.com/oauth/access_token,它現在已經發生了變化。CLIENT_ID = 235326466577139&REDIRECT_URI = HTTP%3A%2F%2Fapps.facebook.com%2Flikeablephotos%2F&client_secret = 66946fa19cec760e5e747eafae1307ff&代碼= AQAeLmwImyd0oAi8VWtC4M-WXRvKvEltq9ER3rtwMx4lCu-9Khe-KGwK8Q9xt_FnrE-GnfkjA7d6Eo_ry2Ce_IKrtSfXfLhLvdFZ7ShxssF4FN0QlZeC9y3qJJ64nVpy_BJFIViioOZeEkxwxGrRpkMb-eplOoW78DK9vVjDMois2FGFQknLVJ9A9Y35HpQXn-G –

2

終於找到了答案,有同樣的問題issue..the是最有可能的,因爲他們給你Facebook的代碼已在PARAMS之間的空格。如果您剛從Facebook複製並粘貼,則會收到HTTP/1.1 400錯誤請求錯誤。把所有參數放在一行,並刪除所有空格,這應該解決它。爲我工作。我知道這是一個較舊的帖子,但如果你有這個問題,讓我知道它是否適合你!

+0

我犯了同樣的錯誤,謝謝! – Ben

0

爲了調試:

採取$ TOKEN_URL實際串並粘貼到瀏覽器地址欄,看看會發生什麼。

你會得到一些回一些JSON錯誤代碼。

對我來說,這是我的令牌過期。開始新的請求工作正常。

0

同樣的問題發生在我身上的問題是與URL提供的即將到期,因爲訪問令牌播放1點小時的有效性訪問令牌,所以我創建了一個新的訪問令牌,它再次工作,希望這有助於信息。