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>