6

数週間前に簡単な Facebook アプリケーションを作成しました。ユーザーに許可を求めることで、Facebook API を介してユーザー情報を取得していました。しかし、それは先週何もないところから機能しなくなり、それ以来答えを探していました.

基本的に、以前は file_get_contents を使用して Facebook API からユーザー情報を取得していました。しかし、失敗し始めた後、cURLに変更しようとしましたが、まだ機能していません。Facebook PHP-SDK を使用してみましたが、コードをデバッグして makeRequest メソッドにしましたが、すべてのメソッドで同じ結果が得られました。

Facebook オープン グラフ 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 を返します。
4

1 に答える 1

4

どうやらこれは、Facebook のラウンドロビン DNS 構造に関連しているようです。Facebook のアドレスの 1 つが失敗し、DNS キャッシュが原因でサーバーがまだそのアドレスに接続しようとしていたと思います。

ホスティング プロバイダーは、問題を解決するために DNS キャッシュをクリアする必要がありました。

ラウンドロビン DNS の詳細については、http://en.wikipedia.org/wiki/Round-robin_DNSを参照してください。

于 2012-04-11T06:38:04.183 に答える