【プログラミングしてみよう30】JavaでHTTPリクエストを送る(HttpClient入門)

Java

前回は正規表現を使って文字列の検証・検索・置換を学びました。

今回は「HttpClient」について解説します。 Java 11から標準で使えるようになった java.net.http.HttpClient を使うことで、外部のWebサービスやAPIにHTTPリクエストを送り、データを取得できるようになります。

HttpClientの基本

これまでのプログラムはすべて自分のコンピュータの中で完結していましたが、実際のアプリ開発ではインターネット上のAPIと通信してデータをやり取りする場面がよくあります。

Java 11から標準ライブラリに java.net.http.HttpClient が追加され、追加のライブラリなしでHTTP通信が行えるようになりました。

import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

基本的な流れは以下の通りです。

1. HttpClientを作成する
2. HttpRequestを作成する(URL・メソッド・ヘッダーなどを指定)
3. リクエストを送信してHttpResponseを受け取る
4. レスポンスのステータスコードや本文を処理する

サンプルコード(GETリクエスト)

今回は、誰でも無料で使えるテスト用API「JSONPlaceholder」を使ってサンプルを作ります。

ファイル作成

「Java19」フォルダに HttpGetTest.java という名前でファイルを作成します

コード入力

以下のコードを入力します。

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.io.IOException;

public class HttpGetTest {
    public static void main(String[] args) {
        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
                .GET()
                .build();

        try {
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

            System.out.println("ステータスコード: " + response.statusCode());
            System.out.println("レスポンス本文:");
            System.out.println(response.body());
        } catch (IOException | InterruptedException e) {
            System.out.println("エラー:" + e.getMessage());
        }
    }
}

コンパイル

javac HttpGetTest.java

実行

java HttpGetTest

実行結果は次のようになります。

ステータスコード: 200
レスポンス本文:
{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

サンプルコード(POSTリクエスト)

次に、データをサーバーに送信するPOSTリクエストのサンプルです。

ファイル作成

「Java19」フォルダに HttpPostTest.java という名前でファイルを作成します

コード入力

以下のコードを入力します。

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.io.IOException;

public class HttpPostTest {
    public static void main(String[] args) {
        HttpClient client = HttpClient.newHttpClient();

        String json = "{\"title\": \"ぱんまるの投稿\", \"body\": \"これはテスト投稿です\", \"userId\": 1}";

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://jsonplaceholder.typicode.com/posts"))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(json))
                .build();

        try {
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

            System.out.println("ステータスコード: " + response.statusCode());
            System.out.println("レスポンス本文:");
            System.out.println(response.body());
        } catch (IOException | InterruptedException e) {
            System.out.println("エラー:" + e.getMessage());
        }
    }
}

コンパイル

javac HttpPostTest.java

実行

java HttpPostTest

実行結果は次のようになります。

ステータスコード: 201
レスポンス本文:
{
  "title": "ぱんまるの投稿",
  "body": "これはテスト投稿です",
  "userId": 1,
  "id": 101
}

コードの解説

HttpClient.newHttpClient() でクライアントのインスタンスを作成します。HttpRequest.newBuilder() でリクエストを組み立てます。.uri() でリクエスト先のURLを、.GET() でHTTPメソッドを指定し、.build() で完成させます。

client.send(request, HttpResponse.BodyHandlers.ofString()) でリクエストを送信します。第2引数の BodyHandlers.ofString() はレスポンスの本文を文字列として受け取る指定です。戻り値の HttpResponse<String> から statusCode() でHTTPステータスコードを、body() でレスポンスの本文を取得できます。ステータスコード200は成功、201は新しいリソースの作成成功を意味します。

POSTリクエストでは、.header("Content-Type", "application/json") でリクエストヘッダーを設定し、.POST(HttpRequest.BodyPublishers.ofString(json)) で送信する本文をJSON文字列として指定しています。

通信エラーや割り込みが発生した場合に備えて、IOExceptionInterruptedExceptioncatch しています。| でまとめて複数の例外を1つの catch に書けます。

実際の開発ではレスポンスのJSON文字列を JSONObject などのライブラリで解析して使うことが多いですが、今回は標準ライブラリだけで完結するよう文字列のまま表示しています。

まとめ

java.net.http.HttpClient を使うことで、追加ライブラリなしでHTTP通信が行えます。HttpClient でクライアントを作り、HttpRequest でリクエストを組み立て、send() で送信して HttpResponse を受け取るという流れを覚えておきましょう。GETでデータを取得し、POSTでデータを送信するという基本の使い方を押さえることで、天気情報・為替レート・SNSなど、さまざまなWebサービスのAPIと連携するプログラムが作れるようになります。

2026/07/09(木) ぱんまる

コメント

タイトルとURLをコピーしました