HttpURLConnectionを使ってPOSTやGETでリクエストするサンプル(proxyも考慮)
結構、いろんなタイミングでPOSTやGETを行う機会があるので、ユーティリティのクラスを作りました。
以前、HttpClientを使った、同様のサンプルをご紹介しましたが、それのHttpURLConnection版になります。
HttpClientだとApacheのjarが必要でしが、この方法だとjavaの標準のパッケージなので、手間がかからず、また、https(ssl)のプロトコルでも問題なく動作します。
実際の開発環境では、proxyを通す場合もあると思うので、proxyにも対応したサンプルにしてあります。
サンプルソースとポイント
では、サンプルのソースです。
package com.company.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; public class MyUtil { private static Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("xxxxxxxx.co.jp", 80xx)); private static String proxySwitch = "1"; public static String callGet(String strGetUrl){ HttpURLConnection con = null; StringBuffer result = new StringBuffer(); try { URL url = new URL(strGetUrl); if(proxySwitch.equals("1")){ con = (HttpURLConnection) url.openConnection(proxy); }else{ con = (HttpURLConnection) url.openConnection(); } con.setRequestMethod("GET"); con.connect(); // HTTPレスポンスコード final int status = con.getResponseCode(); if (status == HttpURLConnection.HTTP_OK) { // 通信に成功した // テキストを取得する final InputStream in = con.getInputStream(); String encoding = con.getContentEncoding(); if(null == encoding){ encoding = "UTF-8"; } final InputStreamReader inReader = new InputStreamReader(in, encoding); final BufferedReader bufReader = new BufferedReader(inReader); String line = null; // 1行ずつテキストを読み込む while((line = bufReader.readLine()) != null) { result.append(line); } bufReader.close(); inReader.close(); in.close(); }else{ System.out.println(status); } }catch (Exception e1) { e1.printStackTrace(); } finally { if (con != null) { // コネクションを切断 con.disconnect(); } } System.out.println("result=" + result.toString()); return result.toString(); } public static String callPost(String strPostUrl, String strContentType, String formParam){ HttpURLConnection con = null; StringBuffer result = new StringBuffer(); try { URL url = new URL(strPostUrl); if(proxySwitch.equals("1")){ con = (HttpURLConnection) url.openConnection(proxy); }else{ con = (HttpURLConnection) url.openConnection(); } con.setDoOutput(true); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", strContentType); OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream()); out.write(formParam); out.close(); con.connect(); // HTTPレスポンスコード final int status = con.getResponseCode(); if (status == HttpURLConnection.HTTP_OK) { // 通信に成功した // テキストを取得する final InputStream in = con.getInputStream(); String encoding = con.getContentEncoding(); if(null == encoding){ encoding = "UTF-8"; } final InputStreamReader inReader = new InputStreamReader(in, encoding); final BufferedReader bufReader = new BufferedReader(inReader); String line = null; // 1行ずつテキストを読み込む while((line = bufReader.readLine()) != null) { result.append(line); } bufReader.close(); inReader.close(); in.close(); }else{ System.out.println(status); } }catch (Exception e1) { e1.printStackTrace(); } finally { if (con != null) { // コネクションを切断 con.disconnect(); } } System.out.println("result=" + result.toString()); return result.toString(); } }
プロキシ設定について proxySwitchが”1″だとproxyを使用しますので、必要ない場合は0など、1以外の値にしてください。
POSTを指定する場合は、HttpURLConnection#setDoOutputメソッドで引数にtrueを設定する必要があります。
使い方
では、使う方のサンプルのソースです。POSTのパラメータを渡したい場合は、下記サンプルのように、KeyとValueをつなげてformParamとして渡します。
package com.company.batch; import com.company.util.MyUtil; public class TestBatch { public static void main(String[] args) throws Exception { //MyUtil.callGet("https://www.google.co.jp/"); //MyUtil.callPost("http://localhost:8080/jsonrest/xxxxxxpost", "application/x-www-form-urlencoded;", "foo=33333&bar=value2"); } }