클라이언트와 서버가 주고받는 데이터 형식만 안다면 누구나 클라이언트나 서버를 개발할 수 있다. 간단한 HTTP 클라이언트를 만들었다.
package lesson02.client;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class SimpleHttpClient {
public static void main(String[] args) throws Exception {
//1. 소켓 및 입출력 스트림 준비
//Socket socket = new Socket("www.hani.co.kr", 80);
Socket socket = new Socket("www.daum.net", 80); //웹 서버 기본 포트번호 : 80
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
//2. 요청(request)라인 출력
out.println("GET / HTTP/1.1"); //웹 서버 루트폴더에 있는 기본문서(/)
//3. 헤더정보 출력
//out.println("Host: www.hani.co.kr");
out.println("Host: www.daum.net"); //접속하려는 웹 서버 주소
out.println("User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0)" //요청자 정보
+ " AppleWebKit/537.36 (KHTML, like Gecko)"
+ " Chrome/30.0.1599.101 Safari/537.36");
//4. 공백라인 출력
out.println(); //요청의 끝 표시
//5. 응답(response) 내용 출력
String line = null;
while((line = in.readLine()) != null) {//서버로부터 받은 데이터 line 단위로 표시
System.out.println(line);
}
in.close();
out.close();
socket.close();
}
}
SimpleHttpClient를 실행하면 '다음'의 웹 서버로부터 받은 데이터가 출력된다. 그런데..

주석을 한 '한겨레'의 웹 서버로부터 받은 내용이 출력이 되었다. 분명히 주석처리를 하였음에도 불구하고 계속 위 내용이 출력되었다. 이 문제를 해결하기 위해서

이클립스의 Project 탭에서 web02 프로젝트를 Clean을 하니 정상적으로 동작하였다.

출력된 내용들을 보면 HTTP 응답 상태 코드가 301, 302이다. 301(Moved Permanently)은 이름처럼 요청된 리소스가 Location 헤더에서 제공한 URL로 영구적으로 이동되었다는 것이고 302(Moved Temporarily)는 요청된 리소스가 임시적으로 Location 헤더에서 제공한 URL로 이동되었다는 것이다.
이후 콘솔창의 출력 크기 제한을 없앴다.

참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr
'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글
10. POST 요청 (0) | 2022.01.05 |
---|---|
9. GET 요청 (0) | 2022.01.04 |
7. HTTP 프로토콜의 이해 (1) (0) | 2022.01.02 |
6. 웹 애플리케이션 아키텍처의 특징 (1) | 2022.01.01 |
5. 클라이언트·서버 아키텍처의 진화 (0) | 2021.12.30 |
댓글