Class HttpRequest
Class HttpRequest
public abstract class HttpRequest
extends Object
HTTP 요청이에요. HttpRequest 인스턴스는 HttpRequest 빌더를 통해 만들어져요. HttpRequest 빌더는 newBuilder 메서드 중 하나에서 얻어요. 요청의 URI, 헤더, 본문을 설정할 수 있어요. 요청 본문은 POST, PUT 또는 method 메서드 중 하나에 제공되는 BodyPublisher를 통해 제공돼요. 빌더에 필요한 모든 매개변수가 설정되면 build가 HttpRequest를 반환해요. 빌더는 일부 매개변수에서 다른 여러 개의 관련 요청을 만들기 위해 여러 번 복사·수정될 수 있어요. 다음은 응답 본문을 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)