사용자 도구

사이트 도구


java:httpclient

문서의 이전 판입니다!


Java HttpClient

주의

성능 이슈

  • Java 17 미만 버전의 Http Client 는 synchronized 블록이 있어서 일부 상황에서 멀티 쓰레드에서 동시 호출시 문제 발생소지가 있음. Java 17 이상에서는 괜찮음.

일부 헤더가 사라지는 문제

  • 일부 헤더(connection, content-length, expect, host, upgrade)가 사라지는 현상이 발생한다.
  • 이것은 문제는 아니고, 의도된 것인데 System Property 를 지정해주면된다.
# 대소문자 안 가림
jdk.httpclient.allowRestrictedHeaders=host,content-length

SSL 에서 memory leak

인증 / Authentication

HttpClient client = HttpClient.newBuilder()
  .authenticator(new Authenticator() {
      @Override
      protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication("<사용자명>", "<비번>".toCharArray());
      }
  })
  .build();
// header 직접 설정방식
private static final String getBasicAuthenticationHeader(String username, String password) {
    String valueToEncode = username + ":" + password;
    return "Basic " + Base64.getEncoder().encodeToString(valueToEncode.getBytes());
}
 
HttpRequest request = HttpRequest.newBuilder()
  .GET()
  .uri(new URI("https://postman-echo.com/basic-auth"))
  .header("Authorization", getBasicAuthenticationHeader("<사용자명>", "<비번>"))
  .build();

Connection Pool

HttpRequestBuilder

  • header(key, value) : 헤더를 추가한다.
  • setHeader(key, value) : 헤더를 추가하면서 기존값이 있으면 덮어쓴다.

Proxy

System 설정값 따르기

HttpClient.newBuilder()
      .proxy(ProxySelector.getDefault())
      .build();

명시적 지정

HttpClient client = HttpClient.newBuilder()
      .proxy(ProxySelector.of(new InetSocketAddress("www-proxy.com", 8080)))
      .build();

참조

java/httpclient.1701134059.txt.gz · 마지막으로 수정됨: 2023/11/28 10:14 저자 kwon37xi