サーバから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 インスタンスで自動に従うかどうかを設定します。
とのこと。