ネットワーク

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を活用して、より効果的なアプリケーション開発に取り組んでみてはいかがでしょうか。

関連記事

Back to top button