본문 바로가기
Programming Language/Java

자바로 HTTP 요청 보내고 받기

by Ahngyuho 2025. 1. 13.

오늘은 자바를 이용해서 HTTP 요청을 보내는 방법에 대해서 공부한 것을 정리해보려고 합니다. 단순 문법 정리이므로 간단하게 각 클래스가 어떤 역할을 하는지 이해하고 어떻게 사용하는지만 정리했습니다. 

 

HttpClient , HttpRequest, HttpResponse 클래스 

HttpClient , HttpRequest, HttpResponse 는 HTTP 요청을 보내고 해당 요청의 응답을 가져올 때 사용됩니다. 

 

 

HttpClient 사용법

생성

HttpClient client = HttpClient.newHttpClient();

 

 

GET 요청 생성 방법

			//HTTP request 생성 방법
            httpRequest = HttpRequest.newBuilder()
                    .uri(URI.create(url)) //url 
                    .header(헤더...) //header
                    .GET() 
                    .build();
            //HTTP 요청 및 응답 가져오기
            httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
            String responseBody = httpResponse.body();

 

POST 요청 생성 방법

client = HttpClient.newHttpClient();
            httpRequest = HttpRequest.newBuilder()
                    .uri(URI.create(url))
                    .header(헤더...)
                    .POST(HttpRequest.BodyPublishers.ofString(body))
                    .build();
            httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());

            String responseBody = httpResponse.body();

 

HTTP 요청 보내기

httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
String responseBody = httpResponse.body();

 

 

HttpClient 의 send 메서드 

 

HttpClient 의 send 를 통해 HttpRequest 의 내용으로 HTTP 요청을 하게 되는데, 이 메서드는 두 개의 파라미터를 받습니다.

하나는 HttpRequest 객체, 다른 하나는 HttpResonse.BodyHandler<T> 의 객체 입니다.

두 번째 파라미터를 통해 HttpResponse 의 바디의 타입을 결정지을 수 있습니다. 예를 들어서,

 

httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
String responseBody = httpResponse.body();

 

HttpResponse.BodyHandlers.ofString() 를 전달하면 HttpResponse 객체의 body()는 String 타입을 반환합니다.

 

HttpResponse<byte[]> response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
byte[] body = response.body(); // byte[] 타입

HttpResponse.BodyHandlers.ofByteArray() 를 전달하면 HttpResponse 객체의 body()는 byte[] 타입을 반환합니다.

 

HttpResponse<Path> response = client.send(request, HttpResponse.BodyHandlers.ofFile(Paths.get("output.txt")));
Path body = response.body(); // Path 타입

HttpResponse.BodyHandlers.ofFile(...) 를 전달하면 HttpResponse 객체의 body()는 Path 타입을 반환합니다.