development

Java에서 HTTP HttpClient를 만드는 방법

여름싼타 2023. 2. 6. 20:00
반응형

 

인터넷은 매일 서로 통신하는 수천 개의 웹 응용 프로그램으로 구성된다. 이러한 응용 프로그램은 일반적으로 HTTP를 통해 통신한다. HTTP는 일반적으로 클라이언트-서버 아키텍처를 따른다. 클라이언트는 HTTP request를 전송하여 서버와의 통신을 시작한다. 이후 서버는 HTTP response으로 응답한다.

 

1. Java의 HTTP 메시지란?

Java에는 request, response이라는 두 가지 유형의 HTTP 메시지가 있다.

HTTP Request

HTTP request는 일반적으로 start line , HTTP header, blank line, body로 구성된다. 시작 줄과 HTTP 헤더를 총칭하여 head라고 한다.

Start Line

HTTP 요청의 시작 줄은 HTTP 메서드, 요청 대상(액세스 할 URL) 및 통신 중에 사용할 HTTP 버전을 지정한다. HTTP method는 클라이언트가 서버의 지정된 리소스와 상호 작용하는 방법을 정의하는 명령(예: GET, POST 또는 HEAD)이다.

현재 사용할 수 있는 HTTP 버전은 1.1 또는 2 두 가지이다. (기본값은 HTTP/1.1)

HTTP header (optional)

HTTP 헤더는 클라이언트 또는 서버와 관련된 특정 속성을 정의할 수 있는 헤더-값 쌍이다. 이러한 속성에는 사용자 에이전트(사용 중인 브라우저), 프록시, 콘텐츠 유형 또는 연결과 같은 항목이 포함될 수 있다.

Body (Payload라고도 부름)

Body는 선택사항이며 request 유형에 따라 다르다. 예를 들어 get 및 delete request 유형은 서버에 payload를 전달하지 않기 때문에 body가 필요하지 않다.

 

2. HTTP Response

Java HTTP 응답은 상태 표시줄, 헤더 및 본문의 세 부분으로 구성된다.

  • 상태 표시줄 : HTTP 프로토콜 버전, 상태 코드 및 상태 텍스트로 구성된다. 상태 코드는 요청의 성공 또는 실패를 설명하는 숫자이다. 상태 텍스트는 응답 상태를 설명하는 사람이 읽을 수 있는 짧은 메시지이다.
  • 헤더: 헤더는 HTTP 요청에 설명된 것과 같다.
  • 본문: 본문은 메시지 유형에 따라 선택 사항이다.

 

3. HttpClient 클래스를 사용하는 방법

Java는 개발자가 클라이언트를 생성하는 데 사용할 수 있는 HttpClient 클래스를 제공한다. Java에서 HttpClient를 사용하기 위한 구문이다.

HttpClient client = HttpClient.newHttpClient();

 

위의 코드 예제에서 newHttpClient() 메서드를 사용하면 개발자가 기본 구성으로 HTTP 클라이언트를 만들 수 있다.

다음으로 newBuilder() 메서드를 사용하여 요청을 빌드해야 한다. 최소한 요청한 리소스의 URI와 요청 방법을 제공해야 한다. 기본값은 GET()이다. 따라서 하나를 지정하지 않으면 GET이 사용된다.

HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://openjdk.org/groups/net/httpclient/recipes.html"))
            .GET() 
            .build();

 

요청을 생성한 후 요청을 보내고 응답을 받아야 한다.

HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

 

아래 코드 예제는 프로그래머가 test.com에 요청을 보낸 다음 Java 및 HttpClient를 사용하여 HTML 파일에 저장하는 방법이다.

import java.net.http.*;
import java.net.*;
import java.io.*;


public class HttpClientApp {


   public static void main(String[] args) throws IOException, InterruptedException {


       HttpClient client = HttpClient.newHttpClient();
       HttpRequest request = HttpRequest.newBuilder()
           .uri(URI.create("https://www.test.com/"))
           .GET()
           .build();


       HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());


       File fileObj = new File("test.html");
       fileObj.createNewFile();


       FileWriter fileWriterObj = new FileWriter("test.html");
       fileWriterObj.write(response.body());
      
   }
}

 

 

반응형