인터넷은 매일 서로 통신하는 수천 개의 웹 응용 프로그램으로 구성된다. 이러한 응용 프로그램은 일반적으로 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());
}
}
'development' 카테고리의 다른 글
자바 멀티스레딩 가이드 - Best Practices for Multithreading in Java (0) | 2023.02.09 |
---|---|
Java 스레드(Thread) 데드락(Deadlock) 방지하는 방법 (0) | 2023.02.07 |
Nuxt에서 애드센스 사용하는 방법 3가지 (0) | 2023.02.05 |
2023 웹 개발 트렌드 10가지 (3) | 2023.02.05 |
[Nuxt] Template not found: /node_modules/@nuxtjs/google-adsense/dist/templates/plugin.mjs (0) | 2023.01.01 |