티스토리 뷰

JAVA 웹프로그래밍을 하다보면 가끔은 웹페이지에서가 아닌 서버단에서 특정 URL을 호출해야 하는 경우가 생기게 된다.

보통은 JSP단에서 특정 URL 호출 하는 방법은 간단하다.

단순하게 URL을 POST방식이던 GET 방식이던 호출만 하면 되기 때문이다.

하지만 JAVA 인 서버단에서 호출하게 해야 할 경우 어떻게 해야 할까?

처음 해보는 사람들은 모르는 경우가 있을지 모른다. 필자 또한 처음에는 몰랐기 때문이다.

 

일단 이번 포스팅은 HttpClient 를 사용하여 애플리케이션 프로그램에서 웹페이지를 호출해볼까 한다.

 

---------------------------------------------------------------------------------------------

 

import java.io.IOException;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;


public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
 
  HttpClient client = new HttpClient();
       
        PostMethod remotecall = new PostMethod("http://localhost/test.jsp");//주석1
        remotecall.addRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=euc-kr");
       
       
     // Prepare  parameters
        NameValuePair email   = new NameValuePair("email1", "djusti@naver.com");//주석2
        
        remotecall.setRequestBody(new NameValuePair[] {email});
       
  try {
   client.executeMethod(remotecall);
  } catch (HttpException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }


  if (remotecall.getStatusCode() == HttpStatus.SC_OK) {  //200이면 정상    
    //  result = this.dataParse(remotecall);
   Header[] headers = remotecall.getResponseHeaders();
   for(int i = 0; i < headers.length; i++){
    System.out.println(headers[i].getName() + ": " + headers[i].getValue());
   }
  
      String resultBody = "";
   try {
    resultBody = new String(remotecall.getResponseBodyAsString());
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();   }

      System.out.println(resultBody); //

  }else{
   //result.put("CHK", "0");        
  }
 
 }

}
------------------------------------------------------------------------------------------

 

간단한 소스.

 

일단 소스 설명을 하면 주석1 이라고 적힌 곳이 호출할 웹페이지 주소.

 

PostMethod remotecall = new PostMethod("http://localhost/test.jsp");

 

해당 소스는 GET방식이 아닌 POST 방식으로 호출하는 소스.

("http://localhost/test.jsp"); 이 부분에 호출할 웹페이지 URL 주소를 적으면 된다.

 

Prepare  parameters
        NameValuePair email   = new NameValuePair("email1", "djusti@naver.com");//주석2

 

이 부분은 파라메터를 설정하는 부분.

테스트로 email1이라는 파라메터값을 설정해서 셋팅해주고 있다.

 

 client.executeMethod(remotecall);

호출할 url에 파라메터값과 함께 전송이 되어짐.

remotecall.getStatusCode() 값이 200 을 리턴하게 되면 정상.

정상적으로 받아왔기 때문에 이곳에서 결과값을 파싱해서 사용하면 됨.

 

Header[] headers = remotecall.getResponseHeaders();
   for(int i = 0; i < headers.length; i++){
    System.out.println(headers[i].getName() + ": " + headers[i].getValue());
   }

 

어떠한 값이 헤더값이 들어 있는지 확인하기 위해서 루프 돌면서 헤더값에 들어 있는 값들을  출력하고 있다.

 

resultBody = new String(remotecall.getResponseBodyAsString());

리턴된 body값들을 스트링으로 변환시켜 준다.

 

실질적으로 resultBody 변수에 리턴값이 저장하게 된다.

 

호출한 웹페이지 html 출력 이 정보  가지고 파싱해서 원한는  값을 추출해서 사용하면 원하는 정보를 얻게 됨.

 

JAVA httpClient 사용하기 편을 이만 마칠까 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글