結構、いろんなタイミングで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");
}
}