JavaでHTTPリクエストを簡単に行う:ベストプラクティスとライブラリ
Java で HTTP リクエストを送信する方法
java.net.HttpURLConnection を使用する
これは、Java 1.1 から利用可能な伝統的な方法です。基本的な手順は以下の通りです。
- URL オブジェクトを作成: 送信したい URL を
URL
クラスを使用してオブジェクトに変換します。 - URLConnection オブジェクトを開く:
URL
オブジェクトのopenConnection()
メソッドを呼び出して、URLConnection
オブジェクトを取得します。 - HttpURLConnection にキャスト:
URLConnection
オブジェクトをHttpURLConnection
にキャストします。 - リクエスト メソッドを設定:
HttpURLConnection
オブジェクトのsetRequestMethod()
メソッドを使用して、GET
、POST
、PUT
などの HTTP メソッドを設定します。 - オプションでヘッダーを設定:
HttpURLConnection
オブジェクトのsetRequestProperty()
メソッドを使用して、Content-Type や Authorization などの HTTP ヘッダーを設定できます。 - 出力ストリームを取得 (オプション):
POST
またはPUT
リクエストの場合は、HttpURLConnection
オブジェクトのgetOutputStream()
メソッドを使用して出力ストリームを取得し、リクエストボディを送信します。 - レスポンスを読み込む:
HttpURLConnection
オブジェクトのgetInputStream()
メソッドを使用して入力ストリームを取得し、レスポンスボディを読み込みます。 - 接続を閉じる:
HttpURLConnection
オブジェクトのdisconnect()
メソッドを呼び出して、接続を閉じます。
例:
import java.io.*;
import java.net.*;
public class HttpURLConnectionExample {
public static void main(String[] args) throws IOException {
// 送信する URL
String urlString = "https://www.example.com/";
// URL オブジェクトを作成
URL url = new URL(urlString);
// URLConnection オブジェクトを開く
URLConnection conn = url.openConnection();
// HttpURLConnection にキャスト
HttpURLConnection httpConn = (HttpURLConnection) conn;
// GET リクエストを設定
httpConn.setRequestMethod("GET");
// レスポンスを読み込む
BufferedReader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
// 接続を閉じる
httpConn.disconnect();
}
}
HttpClient API を使用する
Java 9 以降では、HTTP リクエストを送信するためのより新しい API である HttpClient
が導入されました。この API は、非同期リクエストや、認証やプロキシの設定など、より高度な機能をサポートしています。
基本的な手順は以下の通りです。
- HttpClient インスタンスを作成:
HttpClient.newHttpClient()
メソッドを使用して、HttpClient
インスタンスを作成します。 - HttpRequest オブジェクトを作成: 送信したい URL と HTTP メソッドを指定して、
HttpRequest
オブジェクトを作成します。 - 非同期にリクエストを送信:
HttpClient
インスタンスのsendAsync()
メソッドを使用して、リクエストを非同期に送信します。 - レスポンスを処理:
CompletableFuture
オブジェクトを使用して、レスポンスの完了を待機し、レスポンスボディを取得します。
import java.net.http.*;
import java.util.concurrent.CompletableFuture;
public class HttpClientExample {
public static void main(String[] args) throws Exception {
// 送信する URL
String urlString = "https://www.example.com/";
// HttpClient インスタンスを作成
HttpClient httpClient = HttpClient.newHttpClient();
// HttpRequest オブジェクトを作成
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(urlString))
.method("GET")
.build();
// 非同期にリクエストを送信
CompletableFuture<HttpResponse<String>> responseFuture = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString());
// レスポンスを処理
HttpResponse<String> response = responseFuture.get();
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
補足:
- 上記はあくまでも基本的な例です。実際のユースケースに応じて、エラー処理や認証、プロキシ設定などを追加する必要があります。
HttpClient
API は Java 9 以降でのみ利用可能です。Java 8 以前を使用している場合は
Java で HTTP リクエストを送信するサンプルコード
java.net.HttpURLConnection を使用する
import java.io.*;
import java.net.*;
public class HttpURLConnectionExample {
public static void main(String[] args) throws IOException {
// 送信する URL
String urlString = "https://www.example.com/";
// URL オブジェクトを作成
URL url = new URL(urlString);
// URLConnection オブジェクトを開く
URLConnection conn = url.openConnection();
// HttpURLConnection にキャスト
HttpURLConnection httpConn = (HttpURLConnection) conn;
// GET リクエストを設定
httpConn.setRequestMethod("GET");
// レスポンスを読み込む
BufferedReader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
// 接続を閉じる
httpConn.disconnect();
}
}
このコードは、java.net.HttpURLConnection
を使用して https://www.example.com/
に GET リクエストを送信し、レスポンスボディをコンソールに出力します。
HttpClient API を使用する
import java.net.http.*;
import java.util.concurrent.CompletableFuture;
public class HttpClientExample {
public static void main(String[] args) throws Exception {
// 送信する URL
String urlString = "https://www.example.com/";
// HttpClient インスタンスを作成
HttpClient httpClient = HttpClient.newHttpClient();
// HttpRequest オブジェクトを作成
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(urlString))
.method("GET")
.build();
// 非同期にリクエストを送信
CompletableFuture<HttpResponse<String>> responseFuture = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString());
// レスポンスを処理
HttpResponse<String> response = responseFuture.get();
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
HttpClient
API は Java 9 以降でのみ利用可能です。Java 8 以前を使用している場合はjava.net.HttpURLConnection
を使用する必要があります。
Java で HTTP リクエストを送信するその他の方法
Apache HttpClient ライブラリを使用する
java.net.HttpURLConnection
と HttpClient
API 以外にも、Apache HttpClient ライブラリを使用して HTTP リクエストを送信することができます。このライブラリは、より多くの機能と柔軟性を提供します。
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;
public class ApacheHttpClientExample {
public static void main(String[] args) throws Exception {
// 送信する URL
String urlString = "https://www.example.com/";
// CloseableHttpClient インスタンスを作成
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// HttpGet リクエストを作成
HttpGet request = new HttpGet(urlString);
// リクエストを送信し、レスポンスを取得
HttpResponse response = httpClient.execute(request);
// レスポンスボディを文字列に変換
String body = EntityUtils.toString(response.getEntity());
// レスポンスボディをコンソールに出力
System.out.println(body);
}
}
}
OkHttp ライブラリを使用する
OkHttp は、Android でよく使用されるもう 1 つの HTTP クライアントライブラリです。非同期リクエストやキャッシュなどの機能を提供します。
import okhttp3.*;
public class OkHttpExample {
public static void main(String[] args) throws Exception {
// 送信する URL
String urlString = "https://www.example.com/";
// OkHttpClient インスタンスを作成
OkHttpClient client = new OkHttpClient();
// Request オブジェクトを作成
Request request = new Request.Builder()
.url(urlString)
.build();
// リクエストを送信し、レスポンスを取得
Response response = client.newCall(request).execute();
// レスポンスボディを文字列に変換
String body = response.body().string();
// レスポンスボディをコンソールに出力
System.out.println(body);
}
}
UniREST フレームワークを使用する
UniREST は、Java で RESTful API を簡単に操作するためのフレームワークです。HTTP リクエストの送信、レスポンスの処理、エラー処理などを簡潔なコードで行うことができます。
import kong.unirest.*;
public class UniRESTExample {
public static void main(String[] args) {
// 送信する URL
String urlString = "https://www.example.com/";
// GET リクエストを送信
HttpResponse response = UniREST.get(urlString).asJson().asPrettyString();
// レスポンスボディをコンソールに出力
System.out.println(response.getBody());
}
}
Spring Framework は、Java でエンタープライズアプリケーションを開発するためのフレームワークです。Spring Web MVC モジュールを使用して、HTTP リクエストを処理することができます。
import org.springframework.web.client.RestTemplate;
public class SpringExample {
public static void main(String[] args) {
// 送信する URL
String urlString = "https://www.example.com/";
// RestTemplate インスタンスを作成
RestTemplate restTemplate = new RestTemplate();
// GET リクエストを送信し、レスポンスを取得
String response = restTemplate.getForObject(urlString, String.class);
// レスポンスボディをコンソールに出力
System.out.println(response);
}
}
- 上記はほんの一例です。他にも様々な方法があります。
- 使用する方法は、プロジェクトの要件や開発者の好みによって異なります。
- ライブラリを使用する場合は、そのライブラリのドキュメントを参照してください。
java html http