Class HttpRequest

Class HttpRequest

public abstract class HttpRequest
extends Object

HTTP 요청이에요. HttpRequest 인스턴스는 HttpRequest 빌더를 통해 만들어져요. HttpRequest 빌더는 newBuilder 메서드 중 하나에서 얻어요. 요청의 URI, 헤더, 본문을 설정할 수 있어요. 요청 본문은 POST, PUT 또는 method 메서드 중 하나에 제공되는 BodyPublisher를 통해 제공돼요. 빌더에 필요한 모든 매개변수가 설정되면 buildHttpRequest를 반환해요. 빌더는 일부 매개변수에서 다른 여러 개의 관련 요청을 만들기 위해 여러 번 복사·수정될 수 있어요. 다음은 응답 본문을 String으로 출력하는 GET 요청의 예시예요.

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("http://foo.com/"))
        .build();
client.sendAsync(request, BodyHandlers.ofString())
        .thenApply(HttpResponse::body)
        .thenAccept(System.out::println)
        .join();

HttpRequest

protected HttpRequest()

HttpRequest를 만들어요.

newBuilder

public static HttpRequest.Builder newBuilder(URI uri)

주어진 URI로 HttpRequest 빌더를 만들어요.

  • Parameters: uri - 요청 URI
  • Returns: 새 요청 빌더
  • Throws: IllegalArgumentException - URI 스킴(scheme)이 지원되지 않을 때

newBuilder

public static HttpRequest.Builder newBuilder(HttpRequest request,
 BiPredicate<String,String> filter)
HttpRequest.newBuilder(request, (n, v) -> true)
HttpRequest.newBuilder(request, (n, v) -> false)
HttpRequest.newBuilder(request, (name, value) -> !name.equalsIgnoreCase("Foo-Bar"))

초기 상태가 기존 HttpRequest에서 복사된 Builder를 만들어요. 이 빌더는 원본과 동등한 HttpRequest를 만들기 위해 사용될 수 있으며, 구성 전에 요청 상태를 수정할 수 있게 해 줘요 — 예를 들어 추가 헤더를 더하는 것. filter는 주어진 요청에서 복사될 때 각 헤더 이름·값 쌍에 적용돼요. 완료되면 filter가 제시한 조건을 충족하는 헤더만 이 메서드가 반환하는 Builder에 존재할 거예요.

  • API Note: 다음 시나리오들이 filter의 전형적인 사용 사례를 보여줘요. HttpRequest request가 주어졌을 때:
    • 모든 헤더 유지: HttpRequest.newBuilder(request, (n, v) -> true)
    • 모든 헤더 제거: HttpRequest.newBuilder(request, (n, v) -> false)
    • 특정 헤더(예: Foo-Bar) 제거: HttpRequest.newBuilder(request, (name, value) -> !name.equalsIgnoreCase("Foo-Bar"))
  • Parameters: request - 원본 요청
  • Returns: 새 요청 빌더
  • Throws: IllegalArgumentException - 주어진 요청에서 새 빌더를 시드(seed)할 수 없을 때(예를 들어 요청에 불법 매개변수가 있을 때)
  • Since: 16

newBuilder

public static HttpRequest.Builder newBuilder()

HttpRequest 빌더를 만들어요.

  • Returns: 새 요청 빌더

bodyPublisher

public abstract Optional<HttpRequest.BodyPublisher> bodyPublisher()

이 요청에 설정된 HttpRequest.BodyPublisher를 담은 Optional을 반환해요. 요청 빌더에 BodyPublisher가 설정되지 않았으면 Optional은 비어 있어요.

  • Returns: 이 요청의 BodyPublisher를 담은 Optional

method

public abstract String method()

이 요청의 요청 메서드를 반환해요. 명시적으로 설정되지 않으면 어떤 요청의 기본 메서드는 "GET"이에요.

  • Returns: 이 요청의 메서드

timeout

public abstract Optional<Duration> timeout()

이 요청의 타임아웃 기간을 담은 Optional을 반환해요. 요청 빌더에 타임아웃 기간이 설정되지 않았으면 Optional은 비어 있어요.

  • Returns: 이 요청의 타임아웃 기간을 담은 Optional

expectContinue

public abstract boolean expectContinue()

이 요청의 expect continue 설정을 반환해요.

  • Returns: 이 요청의 expect continue 설정

uri

public abstract URI uri()

이 요청의 URI를 반환해요.

  • Returns: 이 요청의 URI

version

public abstract Optional<HttpClient.Version> version()

HttpRequest에 대해 요청될 HTTP 프로토콜 버전을 담은 Optional을 반환해요. 요청 빌더에 버전이 설정되지 않았으면 Optional은 비어 있어요. 그 경우 요청될 버전은 보내는 HttpClient의 버전이에요. 실제로 사용된 버전을 결정하려면 대응하는 HttpResponse를 조회해야 해요.

  • Returns: HTTP 프로토콜 버전

headers

public abstract HttpHeaders headers()

이 요청이 (또는 보낼) (사용자가 접근할 수 있는) 요청 헤더들이에요.

  • Returns: 이 요청의 HttpHeaders

equals

public final boolean equals(Object obj)

이 HTTP 요청 인스턴스가 주어진 객체와 동등한지 검사해요. 주어진 객체가 HttpRequest가 아니면 이 메서드는 false를 반환해요. 두 HTTP 요청은 그들의 URI, 메서드, 헤더 필드가 모두 같을 때 동등해요. 이 메서드는 Object.equals 메서드의 일반 계약을 충족해요.

  • Overrides: Object 클래스의 equals
  • Parameters: obj - 이 객체를 비교할 대상 객체
  • Returns: 주어진 객체가 이 HTTP 요청과 동등한 HttpRequest인 경우에만 true
  • See Also: Object.hashCode(), HashMap

hashCode

public final int hashCode()

이 HTTP 요청 인스턴스에 대한 해시 코드를 계산해요. 해시 코드는 HTTP 요청의 URI, 메서드, 헤더 구성 요소에 기반하며, Object.hashCode 메서드의 일반 계약을 충족해요.

  • Overrides: Object 클래스의 hashCode
  • Returns: 이 HTTP 요청의 해시 코드 값
  • See Also: Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)