Java > HTTP通信

下位ページ

Content

HTTP通信



  1. URLのインスタンスを作成。ここで接続先を指定する。
  2. URLのインスタンスのopenConnectionで接続
    • HttpURLConnectionを作成
  3. パラメータはOutputStreamで出力する
  4. getResponceMessage()でレスポンスのボディを受け取る
  5. disconnect()で通信終了

URL url = new URL(strURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
 
connection.setDoOutput(true);
connection.setUseCashes(false);
connection.setRequestMethod("POST"); // 通信方法にPOSTを指定
 
// パラメータ送信
 
OutputStream os = uc.getOutputStream(); // POST用のOutputStreamを取得
PrintStream ps = new PrintStream(os);
 
String postStr = "a=1&b=2&c=3";
 
ps.print(postStr);// データをPOSTする
ps.close();
 
// 受信
InputStream is = uc.getInputStream(); // POSTした結果を取得
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String s;
while ((s = reader.readLine()) != null) {
  System.out.println(s);
 
reader.close();
uc.disconnect();
}

文字化けが起きた

しばらく何事もなかったのに、Toodledoで新しいタスクを作成する処理を行っているときに、iPhone経由でのタスク登録にて文字化けが発生。(iPhone以外では、日本語のタスクを作成しなかった、とかではないと思うが。。。)
  • アラートで表示 OK
  • サーバでの受取での表示 OK
  • Toodledo での受取 NG
なので、servlet→toodledoの送信でだめ?っぽい。
文字コードをセットできる場所として
PrintStream 生成時に UTF-8 を追加
[[PrintStream(java.io.OutputStream, boolean, java.lang.String)
https://docs.oracle.com/javase/jp/6/api/java/io/PrintStream.html#PrintStream(java.io.OutputStream, boolean, java.lang.String)]]
で、正常動作(文字化け回避)になった。

パラメータの出力

パラメータはOutputStreamで出力する
(HttpURLConnection).getOutputStream
でもOutputStreamはバイト文字列で表記とか、使いづらい。
当初、PrintWriterクラスを使っていたが、日本語を使う必要が出た際に、文字化けで詰まったので、
OutputStreamWriterクラスを使うようにした。
OutputStreamWriter osw = new OutputStreamWriter(connection.gerOutputStream(),"UTF-8");
osw.write(str);
osw.close();



レスポンスの「確認」

System.err.println(httpcon.getResponseCode()) // 戻り値はint
System.err.println(httpcon.getResponseMessage())



basic 認証

http://x68000.q-e-d.net/~68user/net/java-http-url-connection-2.html
https://developer.android.com/reference/android/util/Base64.html
http://www.programing-style.com/android/android-api/android-basic-authentication/
正式な?方法があるらしいが、代替的な方法で、client_id と client_secret をパラメータとして渡す方法もあるらしい。
最終更新:2017年01月22日 11:39