12월 28, 2023

Java HTTP Request 사용법 (.http) + String으로 readLine해보기

우리가 흔히 사용하는 HTTP protocol의 요청이 어떻게 들어오는지를 위해 Java Spring을 사용하여 간단 코드를 작성해보았다. 


public void start() throws IOException {
try (ServerSocket serverSocket = new ServerSocket(port)) {
logger.info("1. Custom WAS started {} port.", port);

Socket clientSocket;
logger.info("2. Custom WAS waiting for the client.");

while ((clientSocket = serverSocket.accept()) != null) {
logger.info("3. Custom WAS client connected.");


try (InputStream in = clientSocket.getInputStream(); OutputStream out = clientSocket.getOutputStream()) {
BufferedReader br = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
DataOutputStream dataOutputStream = new DataOutputStream(out);

String line;
while ((line = br.readLine()) != "") {
System.out.println(line);
}
}
}
}
}
그 다음으로는 Java project 최상단 우클릭 => New => HTTP Request를 클릭하여 
.http 확장자의 파일을 하나 만들어준다. 이렇게 .http를 사용하면 우리가 흔히 요청을 날릴 때 사용하는 Postman을 대체할 수 있고, Intellij에서 지원을 해주기 때문에 git으로도 버전 관리가 가능하다는 장점이 있다. 

그런 다음에  이렇게 8080 포트로 get 요청을 하나 보내준다. 

테스트 하기 위해서는 Java main class를 먼저 실행해 준 뒤, 생성한 .http 파일을 이후에 클릭해주면 자연스레 get 요청을 보내주는 것이다.


이렇게 하면 



client를 기다리다가 http 요청이 들어가 이후 client가 connected 되었다는 것을 알 수 있다. 

그 다음 들어오는 http request header를 읽기 위해서 BufferedReader를 사용하였고, 
BufferedReader를 통해 string으로 readLine() 을 할 수 있다. 

그 결과로 다음과 같은 String이 출력되는 것을 알 수 있다. 


GET 으로 HTTP/1.1 요청이 들어갔고 
Host 정보, Connection 정보, User-Agent, Accept-Encoding 정보가 Request 정보에 담겨있다는 것을 알 수 있다. 

이런 식으로 HTTP 정보를 읽어보았으니 이를 custom하여 
customized Tomcat을 구현해볼 수 있다.