ブログランキング・にほんブログ村へ


iPhone/iPad用潜水艦ゲームアプリ ソナーエコー iTunesにて公開中

2013年04月01日

HttpClientでlocation redirectが自動で実行されないようにする

Android。

HttpPostやHttpGetをHttpClientにかませてHTTPサーバーにリクエストを投げてHttpResponseを受けるパターン。


HttpClient httpclient = new DefaultHttpClient();

そのまんまだと、リダイレクトが勝手に処理されて、得られるHttpResponseはリダイレクトした先のものになってしまう。

そういうときは
httpclient.getParams().setBooleanParameter(ClientPNames.HANDLE_REDIRECTS,false );

とやって自動リダイレクトを抑止してやる必要があるらしい(実験検証図済み、ただしAndroid2.3えみゅ)。


んで、
HttpResponse httpResponse = httpclient.execute(httpPost);

とかして得られたレスポンスから、location指定されたリダイレクト先を得る。

Header[] sHeaders = httpResponse.getHeaders( "location" );
if( sHeaders != null && sHeaders.length > 0 ){
String locationUrl = sHeaders[ 0 ].getValue();
Log.v("location url", locationUrl );
}

この例は単にLogに出してるだけだけど。

あと、locationでリダイレクト指定されたときのhttpのステータスって200 OKじゃなくって 302 Moved Temporarily になるの、いまさらながら知った。

##2013.4.22追記

.htaccessの
RewriteEngine on
でリダイレクトすると
301 リダイレクトってのになる。
posted by みこあいさ at 18:43| Android開発