Java HTTP通信のサンプル(HttpClient)

JavaのHTTP通信のサンプルです。
Apache HttpComponentsのHttpClientを使用しています。

1.jarファイルの取得

Apacheのサイトで4.5.3.zip(HttpClient 4.5.3 (GA))をダウンロードします。

Apache HttpComponentsのサイト
http://hc.apache.org/
(左のDownloadのリンクをクリックします)

ダウンロードしたzipを展開し以下のファイルを任意の場所に配置します。
・httpclient-4.5.3.jar
・httpcore-4.4.6.jar
・commons-logging-1.2.jar

2.jarファイルをクラスパス(ビルドパス)に追加

httpclient-4.5.3.jarとhttpcore-4.4.6.jarとcommons-logging-1.2.jarをクラスパスに追加します。
クラスパスに追加する手順は、
Eclipse 外部jarファイルをクラスパス(ビルドパス)に設定する方法参照。

3.ソースコードの作成(GET)

以下のコードを記述します。GETのサンプルです。
22行目のhttp://httpbin.org/は、通信系のテストができるサイトです。
http://httpbin.org/

package test1;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

/**
 * HttpClientsのサンプル
 */
class Sample {

	void runSample() {
		Charset charset = StandardCharsets.UTF_8;
		
		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpGet request = new HttpGet("http://httpbin.org/get");
		
		System.out.println
			("requestの実行 「" + request.getRequestLine() + "」");
			//requestの実行 「GET http://httpbin.org/get HTTP/1.1」
		
		CloseableHttpResponse response = null;

		try {
			response = httpclient.execute(request);
			
			int status = response.getStatusLine().getStatusCode();
			System.out.println("HTTPステータス:" + status);
			//HTTPステータス:200
			
			if (status == HttpStatus.SC_OK){				
				String responseData = 
					EntityUtils.toString(response.getEntity(),charset);				
				System.out.println(responseData);
				//取得したデータが表示される
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (response != null) {
					response.close();
				}
				if (httpclient != null) {
					httpclient.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
public class Test1 {
	public static void main(String[] args) {
		Sample s = new Sample();
		s.runSample();
	}
}

4.ソースコードの作成(POST)

POSTのサンプルです。
30行目のhttp://httpbin.org/は、通信系のテストができるサイトです。
http://httpbin.org/

package test1;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
 * HttpClientsのサンプル
 */
class Sample {

	void runSample() {
		Charset charset = StandardCharsets.UTF_8;

		CloseableHttpClient httpclient = HttpClients.createDefault();
		
		HttpPost request = new HttpPost("http://httpbin.org/post");		
		List<NameValuePair> requestParams = new ArrayList<>();
		requestParams.add(new BasicNameValuePair("user","taro"));
		requestParams.add(new BasicNameValuePair("password","123"));
		
		System.out.println
			("requestの実行 「" + request.getRequestLine() + "」");
			//requestの実行 「POST http://httpbin.org/post HTTP/1.1」
		
		CloseableHttpResponse response = null;

		try {
			request.setEntity(new UrlEncodedFormEntity(requestParams));
			response = httpclient.execute(request);
			
			int status = response.getStatusLine().getStatusCode();
			System.out.println("HTTPステータス:" + status);
			//HTTPステータス:200
			
			if (status == HttpStatus.SC_OK){
				
				String responseData = 
					EntityUtils.toString(response.getEntity(),charset);
				System.out.println(responseData);
				//取得したデータが表示される
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (response != null) {
					response.close();
				}
				if (httpclient != null) {
					httpclient.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
public class Test1 {
	public static void main(String[] args) {
		Sample s = new Sample();
		s.runSample();
	}
}

関連の記事

Java HTTP通信のサンプル(HttpURLConnection)
Java ソケット通信のサンプル
Java Jacksonを使用したJSONの変換のサンプル

 はまったらエンジニア特化型Q&Aサイト
【teratail(テラテイル)】で質問しましょう!


△上に戻る