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


こんな記事も関係あるかも。読んでみてね。

コメントを残す

サブコンテンツ

このページの先頭へ