JAVA HttpURLConnection 활용한 API 호출하기
-- 임시데이터
기상청:날씨누리
URL-API
방재기상정보시스템 - url-api - 외부인은 4번 참고사항링크 클릭 - 예.특보 - f1.단기자료
(잘 모름)
JAVA HttpURLConnection 활용한 API 호출하기(GET, POST, DELETE)
URLConnection과 HttpURLConnection 클래스
CSV형식파일
기상청:기상자료개방포털
(이건 아직)
- HttpURLConnection 객체 생성
package zizonWeather;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class urlApi {
// 1. HttpURLConnection 객체 생성
HttpURLConnection getHttpURLConnection() {
URL url;
HttpURLConnection conn = null;
try {
url = new URL("http://203.247.66.28/url/fct_shrt_reg.php?tmfc=0&authKey=6b89a8e82e7dc3a444ec0d0b0dbbd21ef86bc5c2151e15f9a5629a3ca147bb56cda47ea0a5305014474e1404bd68f65128fb2b80ce121bc85e4909c0b5c175a9");
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET"); //Method 방식 설정. GET/POST/DELETE/PUT/HEAD/OPTIONS/TRACE
conn.setConnectTimeout(5000); //연결제한 시간 설정. 5초 간 연결시도
conn.setRequestProperty("Content-Type", "application/json");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
return conn;
}
}
- API 호출하고 데이터 받기 (GET)
package zizonWeather;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpConnection {
public static void main(String[] args) {
// 2. API 호출하고 데이터 받기 (GET)
HttpUtils htppUtils = new HttpUtils();
String url = "http://203.247.66.28/url/fct_shrt_reg.php?tmfc=0&authKey=6b89a8e82e7dc3a444ec0d0b0dbbd21ef86bc5c2151e15f9a5629a3ca147bb56cda47ea0a5305014474e1404bd68f65128fb2b80ce121bc85e4909c0b5c175a9";
String method = "GET";
String result = "";
HttpURLConnection conn = null;
//HttpURLConnection 객체 생성
conn = htppUtils.getHttpURLConnection(url, method);
//URL 연결에서 데이터를 읽을지에 대한 설정 ( defualt true )
// conn.setDoInput(true);
//API에서 받은 데이터를 StringBuilder 형태로 리턴하여 줍니다.
result = htppUtils.getHttpRespons(conn);
//해당 정보를 확인합니다.
System.out.println("GET = " + result);
}
}
class HttpUtils {
public HttpURLConnection getHttpURLConnection(String strUrl, String method) {
URL url;
HttpURLConnection conn = null;
try {
url = new URL(strUrl);
conn = (HttpURLConnection) url.openConnection(); //HttpURLConnection 객체 생성
conn.setRequestMethod(method); //Method 방식 설정. GET/POST/DELETE/PUT/HEAD/OPTIONS/TRACE
conn.setConnectTimeout(5000); //연결제한 시간 설정. 5초 간 연결시도
conn.setRequestProperty("Content-Type", "application/json");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
return conn;
}
public String getHttpRespons(HttpURLConnection conn) {
StringBuilder sb = null;
try {
if(conn.getResponseCode() == 200) {
// 정상적으로 데이터를 받았을 경우
//데이터 가져오기
sb = readResopnseData(conn.getInputStream());
}else{
// 정상적으로 데이터를 받지 못했을 경우
//오류코드, 오류 메시지 표출
System.out.println(conn.getResponseCode());
System.out.println(conn.getResponseMessage());
//오류정보 가져오기
sb = readResopnseData(conn.getErrorStream());
System.out.println("error : " + sb.toString());
return null;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
conn.disconnect(); //연결 해제
};
if(sb == null) return null;
return sb.toString();
}
public StringBuilder readResopnseData(InputStream in) {
if(in == null ) return null;
StringBuilder sb = new StringBuilder();
String line = "";
try (InputStreamReader ir = new InputStreamReader(in);
BufferedReader br = new BufferedReader(ir)){
while( (line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb;
}
//3. API 호출하고 데이터 받기 (POST)(여긴가?)
// conn.setDoOutput(true); //URL 연결시 데이터를 사용할지에 대한 설정 ( defualt false )
// try (DataOutputStream dataOutputStream = new DataOutputStream(conn.getOutputStream());){
//
// String str = "{\"user\" : \"kimchy\", "
// + "\"post_date\" : \"2009-11-15T14:12:12\", "
// + "\"message\" : \"trying out Elasticsearch\"}";
//
// dataOutputStream.writeBytes(str);
// dataOutputStream.flush();
//
// result = htppUtils.getHttpRespons(conn);
//
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
- API 호출하고 데이터 받기 (DELETE)
package zizonWeather;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class ApiGet {
// 4. API 호출하고 데이터 받기 (DELETE)
public static void main(String[] args) {
String url = "http://203.247.66.28/url/fct_shrt_reg.php?tmfc=0&authKey=6b89a8e82e7dc3a444ec0d0b0dbbd21ef86bc5c2151e15f9a5629a3ca147bb56cda47ea0a5305014474e1404bd68f65128fb2b80ce121bc85e4909c0b5c175a9";
httpTestByMethod(url, "GET");
httpTestByMethod(url, "POST");
httpTestByMethod(url, "DELETE");
}
public static void httpTestByMethod(String url, String method) {
HttpUtils htppUtils = new HttpUtils();
String result = "";
HttpURLConnection conn = htppUtils.getHttpURLConnection(url, method);;
if("GET".equalsIgnoreCase(method)){
// conn.setDoInput(true); //URL 연결에서 데이터를 읽을지에 대한 설정 ( defualt true )
result = htppUtils.getHttpRespons(conn);
}else if("POST".equalsIgnoreCase(method)) {
conn.setDoOutput(true); //URL 연결시 데이터를 사용할지에 대한 설정 ( defualt false )
try (DataOutputStream dataOutputStream = new DataOutputStream(conn.getOutputStream());){
String str = "{\"user\" : \"kimchy\", "
+ "\"post_date\" : \"2009-11-15T14:12:12\", "
+ "\"message\" : \"trying out Elasticsearch\"}";
dataOutputStream.writeBytes(str);
dataOutputStream.flush();
result = htppUtils.getHttpRespons(conn);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if("DELETE".equalsIgnoreCase(method)) {
result = htppUtils.getHttpRespons(conn);
}
System.out.println("Method = " + method + "/ result = " + result);
}
}
class HttpUtils {
public HttpURLConnection getHttpURLConnection(String strUrl, String method) {
URL url;
HttpURLConnection conn = null;
try {
url = new URL(strUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod(method); //Method 방식 설정. GET/POST/DELETE/PUT/HEAD/OPTIONS/TRACE
conn.setConnectTimeout(5000); //연결제한 시간 설정. 5초 간 연결시도
conn.setRequestProperty("Content-Type", "application/json");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
return conn;
}
public String getHttpRespons(HttpURLConnection conn) {
StringBuilder sb = null;
try {
if(conn.getResponseCode() == 200) {
//정상적으로 데이터를 받았을경우
sb = readResopnseData(conn.getInputStream());
}else{
//정상적으로 데이터를 받지 못한 경우
System.out.println(conn.getResponseCode());
System.out.println(conn.getResponseMessage());
sb = readResopnseData(conn.getErrorStream());
System.out.println("error : " + sb.toString());
return null;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
conn.disconnect(); //연결 해제
};
if(sb == null) return null;
return sb.toString();
}
public StringBuilder readResopnseData(InputStream in) {
if(in == null ) return null;
StringBuilder sb = new StringBuilder();
String line = "";
try (InputStreamReader ir = new InputStreamReader(in);
BufferedReader br = new BufferedReader(ir)){
while( (line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb;
}
//3. API 호출하고 데이터 받기 (POST) (여긴가?..)
// conn.setDoOutput(true); //URL 연결시 데이터를 사용할지에 대한 설정 ( defualt false )
// try (DataOutputStream dataOutputStream = new DataOutputStream(conn.getOutputStream());){
//
// String str = "{\"user\" : \"kimchy\", "
// + "\"post_date\" : \"2009-11-15T14:12:12\", "
// + "\"message\" : \"trying out Elasticsearch\"}";
//
// dataOutputStream.writeBytes(str);
// dataOutputStream.flush();
//
// result = htppUtils.getHttpRespons(conn);
//
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
걸리는 점:
C... ? Fortarn ... ?
자바로 불러 올 수 있나 모르겠다. 일단 위의 코드로 불러오는 것 까진 확인되었다. 한글이 깨져서 문제지