年収アップ無料転職カウンセリング実施中! | 転職エージェントはマイナビエージェント

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

HttpClientクラス

public static HttpClient newHttpClient()

HttpClientクラスはJava 11で追加された新しいHTTPクライアントで、以下のような特徴を持っています。

・HTTP 2に対応
・WebSocket通信(=軽量な双方向通信)に対応
・非同期メソッドを提供

以下では、指定されたURLからコンテンツを取得し、その内容を標準出力に書き出す例を通じて、HttpClientによる通信のイディオムを見ていきます。

HttpConnect.java

package com.example.mynavi.http;

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

public class HttpConnect {
  public static void main(String[] args) throws InterruptedException  {
    // ①HttpClientを生成
    HttpClient cli = HttpClient.newBuilder()
        .version(HttpClient.Version.HTTP_2)
        .build();
    // ②HttpRequestを生成
    HttpRequest req = HttpRequest.newBuilder()
        .uri(URI.create("http:⁄⁄java-code.jp/"))
        .build();
    // ③リクエストを送信
    cli.sendAsync(req, HttpResponse.BodyHandlers.ofString())
      .thenAccept(res -> {
        System.out.println(res.body());
      });
    
    Thread.sleep(3000);
  }
}

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Javaコード入門</title>
...後略...
①HttpClientオブジェクトを生成する

HttpClientクラスは、HTTP通信そのものを管理します。HttpClientオブジェクトを生成するには、builderメソッドでHttpClient.Builderオブジェクト(=HttpClientを生成するためのビルダー)を生成した後、そのセッターでHTTP通信の挙動を設定します。

メソッド 設定内容
HttpClient.Builder authenticator(Authenticator auth) 認証コード(HTTP認証)
HttpClient.Builder connectTimeout(Duration duration) 接続タイムアウト時間
HttpClient.Builder cookieHandler(CookieHandler cookie) クッキーを操作するためのハンドラー
HttpClient.Builder followRedirects(HttpClient.Redirect policy) リダイレクト指定に従うか
HttpClient.Builder priority(int priority) HTTP/2リクエストの優先度
HttpClient.Builder version(HttpClient.Version version) HTTPのバージョン

▲HttpClient.Builderインターフェイスの主なセッター

最後にbuildメソッドを呼び出すことで、それまでの設定に基づいてHttpClientオブジェクトを生成できます。

②HttpRequestオブジェクトを生成する

HttpRequestクラスは、HTTPリクエストを管理します。builderメソッドでビルダー(HttpRequest.Builder)を生成した後、セッターでリクエスト情報を設定、buildメソッドでHttpRequestオブジェクトを生成する、という流れは、HttpClientの場合と同じです。

以下に、HttpRequest.Builderクラスの主なセッターをまとめます。

メソッド 設定内容
HttpRequest.Builder DELETE() リクエストメソッド(DELETE)
HttpRequest.Builder GET() リクエストメソッド(GET)
HttpRequest.Builder POST(HttpRequest.BodyPublisher pub) リクエストメソッド(POST)
HttpRequest.Builder PUT(HttpRequest.BodyPublisher pub) リクエストメソッド(PUT)
HttpRequest.Builder method(String method, HttpRequest.BodyPublisher body) リクエストメソッドとリクエスト本文
HttpRequest.Builder setHeader(String name, String value) リクエストヘッダー
HttpRequest.Builder timeout(Duration duration) リクエストのタイムアウト時間
HttpRequest.Builder uri(URI uri) リクエストURI

▲HttpRequest.Builderクラスの主なセッターメソッド

③リクエストを送信する

HttpClient/HttpRequestを生成できたら、あとはsendAsyncメソッドでリクエストを送信するだけです。

sendAsyncメソッド

public abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(
 HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)
T:レスポンス本文の型
request:リクエスト情報
responseBodyHandler:レスポンス本体のためのハンドラー

引数responseBodyHandlerは、レスポンスを処理するためのハンドラーです。
HttpResponse.BodyHandlersクラスの静的メソッドによって生成できます。

メソッド レスポンス本体の型
HttpResponse.BodyHandler<String> ofString([Charset charset]) 文字列
HttpResponse.BodyHandler<Stream<String>> ofLines() ストリーム
HttpResponse.BodyHandler<Path> ofFile(Path file [,OpenOption… openOptions]) ファイル
HttpResponse.BodyHandler<InputStream> ofInputStream() 入力ストリーム
HttpResponse.BodyHandler<byte[]> ofByteArray() バイト配列

▲HttpResponse.BodyHandlersクラスの主な静的メソッド

この例であれば、ofStringメソッドなので、レスポンス本文を文字列として取得します。

sendAsyncメソッドによるリクエストの結果を処理するのは、thenAcceptメソッドの役割です。引数のラムダ式は、HttpResponseオブジェクト(res)を受け取ります。ここでは、そのbodyメソッドで本文を取得&出力しています。

以下に、HttpResponseオブジェクトの主なメソッドをまとめます。

メソッド 取得内容
T body() 本文
HttpHeaders headers() 応答ヘッダー
int statusCode() ステータスコード
URI uri() URI

▲HttpResponseクラスの主なゲッター

HTTP通信
URLConnectionクラス
HttpClientクラス

年収アップ無料転職カウンセリング実施中! | 転職エージェントはマイナビエージェント

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職