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");
         
         
    }
}