3

file_get_contents 无法使用以下网址(无法打开流:HTTP 请求失败!HTTP/1.0 400 错误请求)

$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);

但是如果您将上面的 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

请帮忙,谢谢

4

4 回答 4

3

作为 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;
};
于 2012-06-02T18:39:30.813 回答
2

终于找到了答案,有同样的问题..问题很可能是因为他们给你的 facebook 代码在参数之间有空格。如果您只是从 Facebook 复制和粘贴,您将收到 HTTP/1.1 400 Bad Request 错误。将所有参数放在一行上并删除所有空格,这应该可以解决它。为我工作。我知道这是一篇较旧的帖子,但如果您遇到此问题,请告诉我它是否适合您!

于 2012-10-29T00:47:15.347 回答
0

对于调试:

将 $token_url 中的实际字符串粘贴到浏览器地址字段中,看看会发生什么。

你会得到一些 json 错误代码。

对我来说,这是我的令牌已过期。开始新的请求工作正常。

于 2013-09-12T13:44:44.953 回答
0

同样的问题发生在我身上,问题是 URL 提供的访问令牌已过期,因为访问令牌有 1 小时的有效期,所以我创建了一个新的访问令牌,它再次工作,希望这个信息有帮助。

于 2015-07-23T08:09:20.813 回答