AndroidでPOSTメソッドを使ってログイン
AndroidアプリからWebアプリケーションにログインしようと思ってサンプルを探してたら、PostMethodを使えというサンプルを発見。
apacheからhttpcomponents-core-4.1.3-bin.tar.gz に入ってたjarをビルドパスに加えてもPostMethodというクラスを解決できなくてコンパイルエラー。
調べてみると、PostMethodというクラスは、commons-httpclient-3.0.jarに入ってるらしいけど、これって2007年までしか更新されてない。ということは既にメンテナンスされてないっぽい。
じゃあ、代わりがあるんじゃね?って思ってぐぐってたら、どうやらHttpPostクラスに置き換わってるらしい。
というわけで、こんな感じで実装したらログインできた。
public boolean login(String mailaddress, String password) { if (mailaddress == null || password == null) return false; String url = "http://localhost:8080/hoge/user/login"; DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost post = new HttpPost(url); Listparams = new ArrayList (); params.add("mailaddress", mailaddress); params.add("password", password); try { post.setEntity(new UrlEncodedFormEntity(params)); HttpResponse resp = httpClient.execute(post); // ログインできたかどうかを判定 if (status == HttpStatus.SC_OK && isLoginSucceeded(resp)) { return true; } } catch (Exception e) { throw new RuntimeException(e); } return false; } private boolean isLoginSucceeded(HttpResponse resp) throws IOException { InputStream is = resp.getEntity().getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); try { while (true) { String s = reader.readLine(); if (s == null) break; if (s.contains("ログイン")) return false; } } finally { reader.close(); } return true; }
isLoginSucceeded()の内部で、HTMLを解析して結果を返すようにした。
ここの例では、HTMLに「ログイン」という文字列が含まれていればログイン失敗とみなすようにした。