无法通过curl请求连接到Facebook

时间:2012-04-10 11:56:46

标签: php facebook facebook-graph-api curl

我几周前创建了一个简单的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选项,但似乎都没有。

有什么想法吗?

的index.php

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

用户类

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;
        }
    }
}

备注:

  • 在检查Facebook PHP SDK方法后,我意识到我不需要发送访问令牌,因为如果访问令牌不在$ params中,它会设置它。
  • 它转到sdk中的makeRequest()方法,并从curl_exec返回false。

1 个答案:

答案 0 :(得分:4)

显然这与Facebook的循环DNS结构有关。我猜Facebook的其中一个地址失败了,由于DNS缓存,服务器仍在尝试连接到该地址。

托管服务提供商必须清除其DNS缓存才能解决问题。

有关循环DNS的详细信息,请访问http://en.wikipedia.org/wiki/Round-robin_DNS