Java/실습

[Java] HTTP통신

Puft 2024. 12. 18. 10:10

통신에는 HTTP 통신과 Socket 통신이 있습니다.

 

HTPP 통신은 클라이언트가 요청을 하면 서버가

그 요청에 맞춰서 응답을 하는 형태입니다.

 

Socket 통신은 실시간 통신으로 사용자의 의지와 상관없이

데이터를 강제 전송하는 것이 가능합니다.

 

Java에는 HTTP통신을 위한 기능이 없었습니다. 

이전에는 기능들을 하나하나 만들기 위해 개발해야하는데

다행이도 다른 개발자가 기능을 구현해서 공개를 해놨습니다.

Apache라는 사이트에서 접근할 수 있는데요.

 

Welcome to The Apache Software Foundation

 

Welcome to The Apache Software Foundation

Plus One is the ASF's monthly bulletin to showcase major milestones, news, events, and activities across the ASF project ecosystem. At the bottom of the blog, you can subscribe to get real-time notifications when a new edition is released.

apache.org

 

Apache.org에 들어가서

Download - release - httpcomponents 검색 - 4.5.14 - httpclient/ - binary/

위 설명을 실행한 뒤

 

 

bin.zip파일을 다운받습니다.

다운을 받고 압축을 풀어줍니다.

 

위 jar파일이 Lib 폴더에 존재한다면

다운이 잘 된 것입니다.

 

 

프로젝트 우클릭한 뒤 Build Path를 누른 후

 

 

Add External JARs를 누른 후

모든 Jar파일을 선택 후 적용합니다.

 

Referenced Libraries 폴더안에

Jar파일이 모두 들어오면 성공한 것입니다.

 

다음은 Java에서 웹이랑 통신을 해보려고 합니다.

 

try {

DefaultHttpClient dhc = new DefaultHttpClient();

} catch (Exception e) {

e.printStackTrace();

}

 

먼저 try catch로 DefaultHttpClient를 사용해서

에러처리를 해놓겠습니다.

 

서버 요청에는 GET방식과 POST방식이 있는데

먼저 GET요청을 해보겠습니다.

 

HttpGet hg = new HttpGet("http://www.naver.com");

 

네이버로 HttpGet이라는 것을 사용해 GET요청을 하였습니다.

그리고 서버에선 응답을 해야하는데요.

 

HttpResponse hr = dhc.execute(hg);

 

HttpResponse를 사용해서 응답을 할 수 있습니다.

 

HttpEntity he = hr.getEntity();

 

HttpEntity의 getEntity를 사용하면 응답의 내용을 가져올 수 있습니다.

서버와 클라이언트가 데이터를 주고 받으려면

빨대와 같은 기능이 하나 필요한데

이것이 바로 Stream입니다.

 

InputStream is = he.getContent();

 

InputStream을 사용해서 데이터에 빨대를 꽂는 코드입니다.

이때 InputStream이 데이터를 1바이트씩만 옮길 수 있기 때문에

 

InputStreamReader isr = new InputStreamReader(is, "UTF-8");

 

InputStreamReader를 사용해서 데이터이동의 크기를 키우고

인코딩 방식도 지정할 수 있습니다.

 

하지만 Stream의 사이즈가 여전히 작기 때문에

 

BufferedReader br = new BufferedReader(isr);

 

BufferedReader를 사용해서 사이즈를 좀 더 키울 수 있습니다.

 

그리고 라인이 끝날 때 까지 데이터를 출력해보면

String line = null;

while((line = br.readLine()) != null) {

System.out.println(line);

}

 

 

이런식으로 Http 코드가 넘어오게 됩니다.