목차

Java HttpClient

주의

성능 이슈

일부 헤더가 사라지는 문제

# 대소문자 안 가림
jdk.httpclient.allowRestrictedHeaders=host,content-length
# sec- 헤더는 이것만으로는 해결이 안됨.

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

Proxy

System 설정값 따르기

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

명시적 지정

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

참조