3

これは私のコードです:

$key = "xxx";
$secret = "xxx";
$url = "https://oauth.withings.com/account";

$config = array(
    "siteUrl" => $url,
    "consumerKey" => $key,
    "consumerSecret" => $secret,
    "requestMethod" => "GET"
);
$consumer = new Zend_Oauth_Consumer($config);

try {
    $token = $consumer->getRequestToken();
} catch (Zend_Oauth_Exception $e){
    print $e;
}

これを Mac (OSX 10.8、PHP 5.3.13、Zend 1.11.12) で実行すると、正常に動作します。

しかし、Linux サーバー (Debian 6.0.5、PHP 5.3.3、Zend 1.10.6) で実行すると失敗します。Zend のドキュメントは非常に薄いですが、1.10 と 1.11 の間で同じコードが失敗するようなことが起こったのでしょうか? エラーメッセージは次のとおりです。

「例外 'Zend_Oauth_Exception' とメッセージ 'Could not retrieve a valid Token response from Token URL: '"

このエラーは、URL が送信されていないことを示しているようです。さて、「siteUrl」設定オプションは Zend 1.10 と 1.11 で同じように見えるので、そうではありませんよね?

URL を手動で作成し、Linux ホストで CURL を使用すると、正しい応答が得られるので、ネットワークまたはブロックの問題である可能性はありません。

URL を「/accounts」に変更すると (つまり、誤った URL に変更すると)、このコードを使用する Mac と Linux の両方で HTML 404 コードが返されます。

私はここで途方に暮れています。この問題のトラブルシューティング方法を知っている人はいますか?

4

2 に答える 2

0

Zend_Oauth_Http応答がスキームチェックに失敗しているように見えるため、コードに例外が見つかりました。スキームを明示的に設定することをお勧めします。

コード:

 /**
     * Manages the switch from OAuth request scheme to another lower preference
     * scheme during a request cycle.
     *
     * @param  Zend_Http_Response
     * @return void
     * @throws Zend_Oauth_Exception if unable to retrieve valid token response
     */
    protected function _assessRequestAttempt(Zend_Http_Response $response = null)
    {
        switch ($this->_preferredRequestScheme) {
            case Zend_Oauth::REQUEST_SCHEME_HEADER:
                $this->_preferredRequestScheme = Zend_Oauth::REQUEST_SCHEME_POSTBODY;
                break;
            case Zend_Oauth::REQUEST_SCHEME_POSTBODY:
                $this->_preferredRequestScheme = Zend_Oauth::REQUEST_SCHEME_QUERYSTRING;
                break;
            default:
                require_once 'Zend/Oauth/Exception.php';
                throw new Zend_Oauth_Exception(
                    'Could not retrieve a valid Token response from Token URL:'
                    . ($response !== null
                        ? PHP_EOL . $response->getBody()
                        : ' No body - check for headers')
                );
        }
    }

それが役に立てば幸い。

于 2012-08-05T16:10:53.670 に答える
0

404 は見つからないことを意味するため、サーバーは URL のドキュメントを提供できず、認証とは何の関係もないはずです... 認証の失敗は 403 である必要があります。認証をオンにして 404 のみを取得する場合、404 はリダイレクト時... リクエストをデバッグするには、Charles プロキシなどを試す必要があります。

編集 読み直して、404 が意図的なものであることがわかりました...私はまだリクエストをデバッグしようとします

于 2012-08-05T15:43:41.267 に答える