[JAVA] HttpURLConnection로 REST API 호출하기
public void post(String strUrl, String jsonMessage){
try {
URL url = new URL(strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(5000); //서버에 연결되는 Timeout 시간 설정
con.setReadTimeout(5000); // InputStream 읽어 오는 Timeout 시간 설정
con.addRequestProperty("x-api-key", RestTestCommon.API_KEY); //key값 설정
con.setRequestMethod("POST");
//json으로 message를 전달하고자 할 때
con.setRequestProperty("Content-Type", "application/json");
con.setDoInput(true); // InputStream으로 응답 헤더와 메시지를 읽어들이겠다는 옵션
con.setDoOutput(true); //POST 데이터를 OutputStream으로 넘겨 주겠다는 설정
con.setUseCaches(false);
con.setDefaultUseCaches(false);
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(jsonMessage); //json 형식의 message 전달
wr.flush();
StringBuilder sb = new StringBuilder();
if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
//Stream을 처리해줘야 하는 귀찮음이 있음.
BufferedReader br = new BufferedReader(
new InputStreamReader(con.getInputStream(), "utf-8"));
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
br.close();
System.out.println("" + sb.toString());
} else {
System.out.println(con.getResponseMessage());
}
} catch (Exception e){
System.err.println(e.toString());
}
}
// 요청할 파라미터의 정보를 입력한다.
String body = "id=asdf&pass=asdf";
// URL클래스의 생성자로 주소를 넘겨준다.
URL u = new URL( 주소 );
// 해당 주소의 페이지로 접속을 하고, 단일 HTTP 접속을 하기위해 캐스트한다.
HttpURLConnection huc = (HttpURLConnection) u.openConnection();
// POST방식으로 요청한다.( 기본값은 GET )
huc.setRequestMethod("POST");
//InputStream으로 응답 헤더와 메시지를 읽어들이겠다는 옵션을 정의한다.
huc.setDoInput(true);
// OutputStream으로 POST 데이터를 넘겨주겠다는 옵션을 정의한다.
huc.setDoOutput(true);
// 요청 헤더를 정의한다.( 원래 Content-Length값을 넘겨주어야하는데 넘겨주지 않아도 되는것이 이상하다. )
huc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 새로운 OutputStream에 요청할 OutputStream을 넣는다.
OutputStream os = huc.getOutputStream();
// 그리고 write메소드로 메시지로 작성된 파라미터정보를 바이트단위로 "EUC-KR"로 인코딩해서 요청한다.
// 여기서 중요한 점은 "UTF-8"로 해도 되는데 한글일 경우는 "EUC-KR"로 인코딩해야만 한글이 제대로 전달된다.
os.write( body.getBytes("euc-kr") );
// 그리고 스트림의 버퍼를 비워준다.
os.flush();
// 스트림을 닫는다.
os.close();
// 응답받은 메시지의 길이만큼 버퍼를 생성하여 읽어들이고, "EUC-KR"로 디코딩해서 읽어들인다.
BufferedReader br = new BufferedReader( new OutputStreamReader( huc.getInputStream(), "EUC-KR" ), huc.getContentLength() );
String buf;
// 표준출력으로 한 라인씩 출력
while( ( buf = br.readLine() ) != null ) {
System.out.println( buf );
}
// 스트림을 닫는다.
br.close();
'프로그래밍 > JAVA' 카테고리의 다른 글
[JSTL] Tag가 jsp 화면에 그대로 노출될 경우, escapeXml (0) | 2019.10.17 |
---|---|
[JSTL] 한자리 숫자 앞에 0붙이기, addZero (0) | 2019.09.16 |
[JSTL core] [c:forEach] varStatus를 활용한 변수 (0) | 2019.09.05 |
Mybatis 에서 CDATA 사용하기 (0) | 2019.08.21 |
Arachni를 이용한 웹 취약점 점검 - OWASP 10 (0) | 2019.08.13 |