Java – HTTPリクエストのレスポンスを取得する方法
JavaでHTTPリクエストのレスポンスを取得するには、標準ライブラリのHttpClient
を使用するのが一般的です。
HttpClient
はJava 11以降で利用可能で、非同期通信や同期通信に対応しています。
基本的な手順は、HttpClient
インスタンスを作成し、HttpRequest
オブジェクトでリクエストを定義し、send
またはsendAsyncメソッド
でリクエストを送信してレスポンスを取得します。
レスポンスはHttpResponse
オブジェクトとして返され、body()メソッド
で内容を取得できます。
HttpResponseを使用したレスポンスの取得と処理
Java 11以降、HTTP通信を行うための新しいAPIが追加されました。
このAPIを使用することで、HTTPリクエストを簡単に作成し、レスポンスを取得することができます。
ここでは、HttpResponse
を使用してレスポンスを取得し、処理する方法について解説します。
HttpClientの作成
まず、HTTPリクエストを送信するためのHttpClient
を作成します。
以下のサンプルコードでは、GETリクエストを送信するためのHttpClient
を生成しています。
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class App {
public static void main(String[] args) {
// HttpClientを作成
HttpClient client = HttpClient.newHttpClient();
// リクエストを作成
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data")) // APIのURL
.build();
// レスポンスを取得
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// レスポンスのステータスコードを表示
System.out.println("ステータスコード: " + response.statusCode());
// レスポンスボディを表示
System.out.println("レスポンスボディ: " + response.body());
}
}
このコードでは、HttpClient
を作成し、指定したURLにGETリクエストを送信しています。
レスポンスはHttpResponse
オブジェクトとして取得され、ステータスコードとボディを表示しています。
以下は、上記のコードを実行した際の出力結果の例です。
ステータスコード: 200
レスポンスボディ: {"key": "value"}
このように、HTTPリクエストを送信し、レスポンスを取得することができます。
HttpResponse
を使用することで、レスポンスの内容を簡単に処理することが可能です。
実践例:APIからデータを取得する
ここでは、実際にAPIからデータを取得する例を示します。
具体的には、JSON形式のデータを提供するAPIにGETリクエストを送り、そのレスポンスを処理する方法を解説します。
JSONデータを取得するサンプルコード
以下のサンプルコードでは、JSON形式のデータを返すAPIにリクエストを送り、取得したデータを表示します。
ここでは、架空のAPI https://api.example.com/data
を使用しています。
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class App {
public static void main(String[] args) {
// HttpClientを作成
HttpClient client = HttpClient.newHttpClient();
// リクエストを作成
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data")) // APIのURL
.header("Accept", "application/json") // JSON形式を指定
.build();
try {
// レスポンスを取得
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// ステータスコードを表示
System.out.println("ステータスコード: " + response.statusCode());
// レスポンスボディを表示
System.out.println("レスポンスボディ: " + response.body());
} catch (Exception e) {
// エラーメッセージを表示
System.out.println("エラーが発生しました: " + e.getMessage());
}
}
}
このコードでは、HttpClient
を使用してAPIにGETリクエストを送信し、レスポンスを取得しています。
Accept
ヘッダーを設定することで、JSON形式のデータを要求しています。
また、例外処理を追加して、リクエスト中にエラーが発生した場合に備えています。
以下は、上記のコードを実行した際の出力結果の例です。
ステータスコード: 200
レスポンスボディ: {"data": [{"id": 1, "name": "サンプル1"}, {"id": 2, "name": "サンプル2"}]}
このように、APIからJSONデータを取得し、レスポンスを表示することができます。
取得したデータは、さらに解析して利用することが可能です。
Java 11以前のHTTP通信方法との比較
Java 11以降、HTTP通信のための新しいAPIが導入されましたが、それ以前のバージョンではHttpURLConnection
を使用してHTTPリクエストを行っていました。
ここでは、Java 11以前のHTTP通信方法と新しいAPIの違いを比較します。
HttpURLConnectionを使用したHTTP通信
Java 11以前では、HttpURLConnection
を使用してHTTPリクエストを送信していました。
以下は、HttpURLConnection
を使用したGETリクエストのサンプルコードです。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class App {
public static void main(String[] args) {
try {
// URLを指定
URL url = new URL("https://api.example.com/data");
// HttpURLConnectionを作成
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET"); // リクエストメソッドを設定
// レスポンスコードを取得
int responseCode = connection.getResponseCode();
System.out.println("ステータスコード: " + responseCode);
// レスポンスボディを読み込む
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine); // レスポンスを構築
}
in.close();
// レスポンスボディを表示
System.out.println("レスポンスボディ: " + response.toString());
} catch (Exception e) {
// エラーメッセージを表示
System.out.println("エラーが発生しました: " + e.getMessage());
}
}
}
Java 11以降のHTTP通信との違い
特徴 | Java 11以前 (HttpURLConnection) | Java 11以降 (HttpClient) |
---|---|---|
コードの簡潔さ | 複雑で冗長なコードが必要 | シンプルで直感的なコード |
非同期処理 | 非同期処理はサポートされていない | 非同期処理が容易に実装可能 |
レスポンスの処理 | ストリームを手動で処理する必要がある | 自動的にボディを処理 |
HTTP/2のサポート | サポートされていない | HTTP/2をサポート |
エラーハンドリング | 手動でのエラーチェックが必要 | 例外処理が簡単 |
Java 11以降のHttpClient
は、HTTP通信をより簡単に、効率的に行うための強力なツールです。
HttpURLConnection
に比べて、コードがシンプルで、非同期処理やHTTP/2のサポートが追加されているため、現代のアプリケーション開発においては新しいAPIを使用することが推奨されます。
まとめ
この記事では、JavaにおけるHTTPリクエストのレスポンスを取得する方法について、HttpResponse
を使用した基本的な手法や、APIからデータを取得する実践例、さらにJava 11以前のHTTP通信方法との比較を行いました。
新しいHttpClient
を利用することで、よりシンプルで効率的なHTTP通信が可能になり、開発者にとっての利便性が向上しています。
これを機に、最新のAPIを活用して、より効果的なアプリケーション開発に取り組んでみてはいかがでしょうか。