我正试图在php中使用curl刮掉一个facebook粉丝,但它只是给了我一个空白页面。 这是我的代码。
function curlFunction($source_url){
$ch = curl_init();
$userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1';
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL, $source_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_ENCODING, "UTF-8" );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$html= curl_exec($ch);
curl_close($ch);
return $html;
}
$token = "CAACEdEose0cBADMEK5uLLfSTj1nZCG8eogAZBi6Dfkr4gJN9o6fFuyfEHkPtO94br9i9YP9gmiYPunHxRxr1PqU3YNy34PziACwEaMXl4NT9zZBMgdWD6WFh6mAL2dlqsjnYs9sKQ5sz7ZCVBn7ZA8lVrZCJRq8O0ZD";
$url = "https://graph.facebook.com/StarHub/feed?accesstoken=" . $token;
$html = curlFunction($url, $info);
echo $html;
我已经将此功能用于其他网站以刮取页面,并且工作正常。然后我遇到了这个问题,当我使用https它给我空白页面,但当我只使用http它工作正常,但Facebook图形api要求我使用https来获取内容。
答案 0 :(得分:4)
页面是公开的,即使使用App Access令牌也可以读取Feed。 尝试更改访问令牌,如下所示:
$token = "APP-ID|APP-SECRET";
(App ID和App Secret,中间有一个Pipe)
这是唯一永不过期的令牌,只有当您更改应用程序的ID或秘密时才会过期。
PHP SDK的另一个解决方案:
$result = $facebook->api('/PAGE-ID/feed', array('access_token' => 'APP-ID|APP-SECRET'));
var_dump($result['data']);
如果没有用户授权,您甚至可以在没有访问令牌的情况下执行此操作,无论如何都应该使用App Access令牌。
答案 1 :(得分:0)
问题似乎是因为访问令牌无效,服务器返回 400 Bad Request 错误。这反过来导致curl
因
CURLOPT_FAILONERROR
选项。请参阅此curl
选项here的说明。
以下代码返回与常规浏览器请求相同结果的相同结果:
function curlFunction($source_url){
$ch = curl_init();
$userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1';
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL, $source_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_ENCODING, "UTF-8" );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$html= curl_exec($ch);
curl_close($ch);
return $html;
}
$token = "CAACEdEose0cBADMEK5uLLfSTj1nZCG8eogAZBi6Dfkr4gJN9o6fFuyfEHkPtO94br9i9YP9gmiYPunHxRxr1PqU3YNy34PziACwEaMXl4NT9zZBMgdWD6WFh6mAL2dlqsjnYs9sKQ5sz7ZCVBn7ZA8lVrZCJRq8O0ZD";
$url = "https://graph.facebook.com/StarHub/feed?accesstoken=" . $token;
$html = curlFunction($url, $info);
echo $html;