ret*_*tri 6 php curl facebook facebook-graph-api
我几周前创建了一个简单的Facebook应用程序.我通过询问用户的许可通过Facebook API获取用户信息.但是上周它无缘无故地停止了工作,从那以后我一直在寻找答案.
基本上我曾经使用file_get_contents从Facebook API获取用户信息.但我尝试在它开始失败后将其更改为cURL,但仍然无效.我尝试使用Facebook PHP-SDK,甚至将代码调试为makeRequest方法,但我在所有方法中得到相同的回报.
当向Facebook Open Graph URL发出cURL请求时,请求将失败,错误编号为7或28.它们都是无法连接到站点或超时的错误代码.
我的网站是在共享主机上,我尝试使用cURL来获取其他网站,并且它工作正常.但是当我试图获得甚至http://www.facebook.com时,cURL返回FALSE.
托管有SSL证书,启用了cURL等.前段时间它工作正常.我已经阅读了各种各样的主题和帖子,尝试了许多不同的cURL选项,但似乎都没有.
有任何想法吗?
$auth_url = "https://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($GLOBALS['canvas_page']) . "&scope=publish_stream,email";
$signed_request = $_POST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
if (empty($data["user_id"])) {
echo("<script> top.location.href='" . $auth_url . "'</script>");
} else {
$_SESSION['oauth_token'] = $data['oauth_token'];
$_SESSION['user_id'] = $data["user_id"];
$user = new User($_SESSION['user_id'], $_SESSION['oauth_token']);
Run Code Online (Sandbox Code Playgroud)
function __construct($fid, $at) {
$this->facebook = new Facebook(array(
'appId' => "<APP_ID>",
'secret' => "<FACEBOOK_SECRET_ID>",
));
$this->fid = $fid;
$this->token = $at;
if ($data = $this->getGraph()) {
...
}
}
public function getGraph() {
$session = $this->facebook->getUser();
if ($session) {
try {
$access_token = $this->facebook->getAccessToken();
$attachment = array('access_token' => $access_token);
//$result = $this->facebook->api('/' . $this->fid, 'GET', $attachment);
$result = $this->facebook->api('/' . $this->fid, 'GET');
return $result;
} catch (FacebookApiException $e) {
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
笔记:
显然这与Facebook的循环DNS结构有关。我猜 Facebook 的某个地址失败了,但由于 DNS 缓存的原因,服务器仍在尝试连接到该地址。
托管提供商必须清除其 DNS 缓存才能解决该问题。
有关循环 DNS 的更多信息,您可以访问http://en.wikipedia.org/wiki/Round-robin_DNS。