HttpClient4でmixiにつないでみた
こことJavaのHttpClient 4 を触ってみた。
ここのHttpClientでログイン認証を試す(POST)
まるパクリだけど、あまりにもさっくり繋がってびっくりした。
HttpClient3でaddParameterでできてた、パラメータの設定が
一度NameValuePairのリストに詰め込んでから、setEntityでするようになった?
HttpClientとか3とか4とか以前に、触ったことがないからわからんけれど。
HTTPSでつなぐのに、特別な設定はいらない模様?
これはHttpClient3の公式でも
「HTTPS通信は、普通のHTTP通信と同じくらいシンプルじゃなきゃいけない」
みたいな事書いてあるし、そうなんだろう。4でめんどくさくするとは思えないしw
それから
// 取得したレスポンスのストリーム(?)をクローズ
response.getEntity().getContent().close();
これをやらないと
HttpClient で例外
こういうことになる。
とりあえず、これで、自分のmixiのトップページが見られたので満足。
以下、ほぼまるパクリなソースコード。
public class HttpClientTest { public static void main(String[] args) { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("https://mixi.jp/login.pl"); HttpPost httpGet = new HttpPost("http://mixi.jp/home.pl"); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("email", "xxxxxxxx@hotmail.co.jp")); params.add(new BasicNameValuePair("password", "xxxxxxxxxxxxx")); params.add(new BasicNameValuePair("next_url", "/home.pl")); try { httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); System.out.println("executing request " + httpPost.getURI()); System.out.println("-------------------------------------"); HttpResponse response = httpClient.execute(httpPost); // レスポンスヘッダーの取得 int statusCode = response.getStatusLine().getStatusCode(); System.out.println(statusCode); System.out.println("-------------------------------------"); // 取得したレスポンスのストリーム(?)をクローズ response.getEntity().getContent().close(); if (statusCode == 200) { response = httpClient.execute(httpGet); statusCode = response.getStatusLine().getStatusCode(); System.out.println(statusCode); Header[] headers = response.getAllHeaders(); for (Header header : headers) { System.out.println(header.getName() + ": " + header.getValue()); } System.out.print(System.getProperty("line.separator")); // レスポンスボディの取得 HttpEntity httpEntity = response.getEntity(); System.out.println(EntityUtils.toString(httpEntity)); } } catch (Exception e) { e.printStackTrace(); } finally { // HTTP接続を閉じる(shutdownを実行するとセッションが切れます) httpClient.getConnectionManager().shutdown(); } } }
俺の知ってるJAVAの配色じゃない・・・