프로젝트 하는 동안 아임포트 REST API 사용하면서 토큰을 받아오고 데이터를 읽어오는 작업이 필요했다. 제대로 정리하고 생각보다 정리되어 있는 곳이 없어서 내가 정리해본다.
https://okky.kr/article/479178
우선 분석할 코드는 정말 방향성에 있어서 도움을 받은 상단 주소의 서번트가벳님의 코드이다.
public String getToken(HttpServletRequest request
,HttpServletResponse response
,JSONObject json
,String requestURL) throws Exception{
// requestURL 아임포트 고유키, 시크릿 키 정보를 포함하는 url 정보
String _token = "";
try{
String requestString = "";
URL url = new URL(requestURL); // URL 클래스 : 웹 상에 존재하는 자원에 접근 할 때 사용 자바 내의 URL을 처리하고 싶을 때 사용.
// URLConnection 클래스 : 사용자 인증이나 보안이 설정되어 있지 않은 웹서버에 접속하여 파일 등을 다운로드 하는데 사용.
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //해당 URL에서 페이지 정보를 가져오기 위해서 사용
connection.setDoOutput(true); // URL 연결은 입출력에 사용 될 수 있다. URL 연결을 출력용으로 사용하려는 경우 true로 설정해준다. 기본 값은 false이다 <-> URL을 입력용으로 사용하려는 경우 .setDoInput(true)로 설정한다.
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST"); // POST 형식으로 요청 방식 선택
connection.setRequestProperty("Content-Type¹", "application/json"); // 타입설정(application/json) 형식으로 전송함. request body 전달시 이 형식으로 전달 함.
OutputStream os= connection.getOutputStream(); // 해당 커넥션에 쓸 수 있는 출력 스트림 생성. Data를 담기 위한 객체 생성.
os.write(json.toString().getBytes()²); // String을 바이트 코드로 변경
connection.connect(); // 실제 연결하는 메소드. 네트워크 상의 다른 곳에 있는 곳과 연결.
StringBuilder sb = new StringBuilder();
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// .getResponseCode() : Http 응답 메세지로부터 satus 코드를 취득합니다. (ex: 200/401 등등)
// .HTTP_OK = 200 : status 코드 200인 경우 (OK인경우)
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
// 입력 받은 입력 스트림을 BufferedReader 객체에 저장.
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
br.close();
requestString = sb.toString(); // 읽어온 문자열 requestString.
}
os.flush(); // flush(); 버퍼에 남아있는 데이터를 모두 출력시키고 버퍼름 비움. <-> close(); OutputStream 종료
connection.disconnect(); // 연결 해제
JSONParser jsonParser = new JSONParser³();
JSONObject jsonObj = (JSONObject) jsonParser.parse(requestString); // 읽어온 문자열을 json 형식으로 변환
if((Long)jsonObj.get("code") == 0){ // docs에서 확인 가능.
JSONObject getToken = (JSONObject) jsonObj.get("response");
System.out.println("getToken==>>"+getToken.get("access_token") );
_token = (String)getToken.get("access_token");
}
}catch(Exception e){
e.printStackTrace();
_token = "";
}
return _token;
}
+
1. Content-Type이란? 클라이언트 브라우저로 어떤 자원을 보낼 때 (파일이나 문서), 웹 서버는 HTTP 헤더로 파일이나 자원을 포함하는 바이트의 Stream을 보낸다. 이런 헤더는 클라이언트에게 웹 서버와 세부사항을 묘사함. 이 때 헤더 내에는 보내는 자원의 content 타입이 포함됨. Content-Type 헤더에 지정하는데 이 값은 표준 MIME-Type의 하나이다.
2. getBytes(); 유니코드 문자열(String)을 바이트코드로 인코딩 해주는 메소드. 인자로 캐릭터셋을 넘기지 않으면 사용자 플랫폼읙 ㅣ본 설정 값으로 인코딩 된다. > 인코딩/디코딩 과정에서 필요한 메소드. 데이터 손실이 나지 않도록 사용하는 것 같음.
3. JSONParser : json타입으로 파싱 할 때 사용하는 클래스
* 파싱 : 어떤 데이터를 다른 모양으로 가공하는 것 pares + ing / parseInt
+
많이 배웠다.
정말로.
도움이 많이 된 글
http://cris.joongbu.ac.kr/course/java/api/java/net/HttpURLConnection.html
https://digitalbourgeois.tistory.com/57?category=678387
https://juyoung-1008.tistory.com/4
'JAVA' 카테고리의 다른 글
java.lang.ClassNotFoundException : org.apache.http.HttpEntity / HttpClient 이용 시 (0) | 2020.04.09 |
---|---|
HttpClient 클래스를 이용해서 REST API 사용하기 (1) | 2020.04.04 |
블랙잭 게임 코드 피드백 #2 (0) | 2020.03.29 |
이것이 자바다 6장 클래스 정리 #2 (0) | 2020.03.27 |
이것이 자바다 6장 클래스 정리 #1 (0) | 2020.03.26 |
댓글