あるエンジニアの独り言

JavaでHTTP通信を試してみる(2)

最終更新:

paladin

- view
管理者のみ編集可

2009/12/27

とりあえずソースコードから。

  1. package jp.dark.http.test;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.InputStreamReader;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. import java.util.List;
  8. import java.util.Map;
  9.  
  10. public class HttpRequestTest {
  11.  
  12. /**
  13.   * @param args
  14.   */
  15. public static void main(String[] args) throws Exception {
  16. // TODO 自動生成されたメソッド・スタブ
  17.  
  18. URL url = NEW URL("http://www.google.co.jp");
  19.  
  20. HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();
  21.  
  22. //リクエストメソッドをセット
  23. urlcon.setRequestMethod("GET");
  24.  
  25. urlcon.connect();
  26.  
  27. //レスポンスヘッダ
  28. Map<String,List<String>> headers = urlcon.getHeaderFields();
  29.  
  30. System.out.println
  31. ("===================<<header>>===================");
  32. FOR (Object KEY : headers.keySet()) {
  33. System.out.println((String)KEY + ":" + headers.get(KEY));
  34. }
  35.  
  36. BufferedReader reader =
  37. NEW BufferedReader(NEW InputStreamReader
  38. (urlcon.getInputStream()));
  39.  
  40. System.out.println
  41. ("\n====================<<body>>====================");
  42. while(TRUE){
  43. String line = reader.readLine();
  44. IF (line == NULL) {
  45. break;
  46. }
  47. System.out.println(line);
  48. }
  49.  
  50. reader.close();
  51. urlcon.disconnect();
  52.  
  53. }
  54.  
  55. }
  56.  

とりあえずHTTPリクエストが投げられれば目的達成なので、最小限のコードのみを記述。
ターゲットはグーグル先生にしてみる。

見てのとおり、コードを実行すればレスポンスヘッダとレスポンスのボディ部は出力されるようにコーディングしてるけど、実際どんなパケットが流れるのか興味があったので、WireSharkでパケットキャプチャしてみた。

このソースコードで生成されるHTTPのリクエストヘッダはこんな感じ
GET / HTTP/1.1
User-Agent: Java/1.5.0_21
Host: www.google.co.jp
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
User-Agentに何が入るのかは興味があったけど、まさかJavaがバージョンと共に入るとは・・・。

んでもってレスポンスはこんな感じ
HTTP/1.1 200 OK
Date: Sun, 27 Dec 2009 03:03:17 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=Shift_JIS
Set-Cookie: PREF=ID=96b84c3ca73be4fc(省略)
Set-Cookie: NID=30=Sxv5c1iaM5gF_Wu23r(省略)
domain=.google.co.jp; HttpOnly
Server: gws
X-XSS-Protection: 0
Transfer-Encoding: chunked
Set-Cookieは長いので後半は省略。

ちゃんとボディ部も返ってきてるのだけど、難読化してるのかレスポンスのソースについての体裁を気にしてないのか、非常に見づらいので省略。

いずれにしても、実験は成功したと言えそう。
あとはTwitterAPIの仕様に基づいてリクエストを投げることで、期待するレスポンスが返ってくれば実験ができる予感。





=============== <<<ここから宣伝(自動追加)>>> ===============
ウィキ募集バナー