Web系開発メモ

Java, C#, HTML, CSS, JavaScript のことなどを書いてます。

Java HttpClientで通信を行う方法(Java SE 標準ライブラリ)

Java SE に含まれる HttpClient を使って、通信を行う方法を書いていきます。

バージョン

動作確認で使用した製品のバージョンは以下の通りです。

1. 同期通信を行う方法

以下の Javaクラスを作成して実行します。

src/main/java/org/example/SyncMain.java

package org.example;

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

public class SyncMain {
  public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newBuilder()
      .followRedirects(Redirect.NORMAL)
      .build();
    HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://..."))
      .GET()
      .build();
    HttpResponse<String> response = client.send(
      request, BodyHandlers.ofString()
    );
    System.out.println(response.statusCode());
    System.out.println(response.body());
  }
}

URI を指定して実行すると、HTTPステータスとレスポンスボディが表示されます。

2. 非同期通信を行う方法

以下のクラスを作成して実行します。

src/main/java/org/example/AsyncMain.java

package org.example;

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

public class AsyncMain {
  public static void main(String[] args) {
    HttpClient client = HttpClient.newBuilder()
      .followRedirects(Redirect.NORMAL)
      .build();
    HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://..."))
      .GET()
      .build();
    client.sendAsync(request, BodyHandlers.ofString())
      .thenAccept(response -> {
        System.out.println(response.statusCode());
        System.out.println(response.body());
      });
  }
}

実行するとすぐ終了するので何も表示されないと思います。

join を実行すると結果が表示されます。

client.sendAsync(request, BodyHandlers.ofString())
  .thenAccept(response -> {
    System.out.println(response.statusCode());
    System.out.println(response.body());
  }).join();

3. ビルドファイル

動作確認で使用した Mavenのビルドファイルは以下の通りです。

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>java-http-client</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>
</project>