35

HttpURLConnectionAndroid (からインポート)を介して GET を送信しようとしていますがorg.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection、応答を受信すると、IOExceptionがスローされます。

in doRequestInternal(): 「受信した認証チャレンジは null です」

このエラーの意味と原因は何ですか? Authorization ヘッダーに OAuth パラメーターを書き込んでいますが、別の機会にもこれを行っていますが、問題はありません。

    if (connection == null) {
        connection = (HttpURLConnection) new URL(endpointUrl).openConnection();
        connection.setRequestMethod("GET");
    }

    //... do some OAuth message signing

    connection.connect();

    int statusCode = connection.getResponseCode(); // throws IOException
4

4 に答える 4

50

その理由がわかりました。

まず第一に、このエラーが何を意味するのかを知らないすべての人へ (私は確かにそうではありませんでした): この例外は、サーバーが 401 で応答した場合にスローされます。getResponseCode() (iow自分で 401 をチェックすることはできませんが、代わりにこの IOException をキャッチする必要があります...)。

401 の実際の原因は、この時点で期待されていた場所に OAuth 検証コードを送信しなかったことです。

于 2009-08-31T14:04:10.353 に答える
13

たぶん誰かのために役立つでしょう...

この例外は、応答ヘッダーの形式が正しくないことを意味します。「WWW-Authenticate」ヘッダーが見つかりませんでした。また、401 コードを含むチャンクされた回答はサポートされていないため、「Content-Length」ヘッダーが必要になります (ゼロの場合もあります)。

于 2012-03-18T21:01:15.613 に答える
2

HTTP 認証トークンベースの認証の2 つの認証方法があることに注意してください。HTTP 認証を使用している場合は、参照されている仕様に従う必要があります。サーバー側にWWW-Authenticatejava.net.Authenticatorヘッダー フィールドを含める、ローカルで使用するなどです。トークン ベースの認証を使用している場合は、トークンを保存して作成するために Cookie を使用する必要があります。長時間のセッションを存続させることができます。そのような場合は、次のコードをandroid.app.Application.onCreate()

CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

また、 WWW-Authenticateヘッダー フィールドなしでサーバーから HTTP 401 を受信して​​も問題はありません。

于 2014-05-26T09:35:57.593 に答える