2009-09-09

자바 HTTP POST 요청

자바(1.4 이상)로 HTTP POST 요청을 하는 방법이다.

먼저 URLConnection 객체를 생성한다.

URL url = new URL("http://example.dimdol.com/example.jsp");
URLConnection con = url.openConnection();

URLConnection 객체 setRequestProperty 메소드로 HTTP 헤더 정보를 설정한다.

con.setRequestProperty("Accept-Language",  "ko-kr,ko;q=0.8,en-us;q=0.5,en;q=0.3");

URLConnection 객체 setDoOutput 메소드로 POST 요청임을 설정한다.

con.setDoOutput(true);


요청 파라미터는 name=value 패턴으로 지정하고 두 개 이상은 &을 사용해서 연결한다.

String parameter = URLEncoder.encode("name", "UTF-8") + "=" URLEncoder.encode("dimdol", "UTF-8");

parameter += "&" + URLEncoder.encode("age", "UTF-8") + "=" URLEncoder.encode("35", "UTF-8");

HTTP 요청을 한다.

OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(parameter);
wr.flush();  // 꼭 flush를 호출해야 한다.


응답 결과가 텍스트인 경우에는 다음과 같이 처리한다.

BufferedReader rd = null;

rd = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
String line = null;
while ((line = rd.readLine()) != null) {
  // 로직 처리
}

응답 결과가 XML인 경우에는 다음과 같이 처리한다.

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(con.getInputStream());

// 이하 document를 이용해서 로직 처리

응답 헤더는 다음과 같이 확인할 수 있다.

String cookie = con.getHeaderField("Set-Cookie");


전체를 try/finally로 묶고 finally 절에서 OutputStreamWriter과 BufferedReader를 close한다.



No comments: