Volleyが勝手にリダイレクトするのを禁止する方法

サーバから302が返ってきたときに、Volleyが自動的にリダイレクトするのですが、開発用のAPIなどでBasic認証ヘッダを追加している場合など、リダイレクト先にも認証ヘッダを付けたままリクエストしてしまいます。

これが原因でAWS S3からデータが取れないということがありました。

とりあえず勝手にリダイレクトしないようになれば良いので、HttpURLConnectionのsetInstanceFollowRedirectsをfalseにすることで対応しました。

public class MyHurlStack extends HurlStack {

    @Override
    protected HttpURLConnection createConnection(URL url) throws IOException {
        HttpURLConnection connection = super.createConnection(url);

        // 自動リダイレクトを禁止する
        connection.setInstanceFollowRedirects(false);
        connection.setRequestProperty("Accept-Encoding", "");

        return connection;
    }

    @Override
    public HttpResponse performRequest(Request<?> request,
            Map<String, String> additionalHeaders) throws IOException,
            AuthFailureError {
        URL url = new URL(request.getUrl());
        if (url.getHost().equals("開発環境のホスト名")) {
            // Basic認証ヘッダの追加
            additionalHeaders
                    .put("Authorization", "Basic ********************");
        }

        return super.performRequest(request, additionalHeaders);
    }

}

setInstanceFollowRedirectsは

HTTP リダイレクト (応答コード 3xx の要求) を、この HttpURLConnection インスタンスで自動に従うかどうかを設定します。

とのこと。

HttpURLConnection (Java Platform SE 6)


タグ: ,

新しく会社作りました!

コメントをどうぞ