본문 바로가기
JAVA

HttpURLConnection 이용해서 REST API 사용하기

by mingutistory 2020. 4. 2.
728x90

프로젝트 하는 동안 아임포트 REST API 사용하면서 토큰을 받아오고 데이터를 읽어오는 작업이 필요했다. 제대로 정리하고 생각보다 정리되어 있는 곳이 없어서 내가 정리해본다. 

 

https://okky.kr/article/479178

 

OKKY | 아임포트로 개발중 rest api 관련 질문좀 드립니다 ㅠ

안녕하세요 spring으로 개발하고 아임포트로 결제모듈을 붙이려고합니다 rest api 결제 조회를 할 때 토큰을 인증받아야하는데 토큰인증을 controller에서 하려고 하는데 혹시 참고할만한 자료가 있을까요?  저도 충분히 공부를 하고 진행하면 좋다고 생각하지만 급해서 질문드립니다 ㅠㅠ

okky.kr

우선 분석할 코드는 정말 방향성에 있어서 도움을 받은 상단 주소의 서번트가벳님의 코드이다. 

 

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

 

HttpURLConnection (Java 2 Platform SE 5.0)

addRequestProperty, connect, getAllowUserInteraction, getConnectTimeout, getContent, getContent, getContentEncoding, getContentLength, getContentType, getDate, getDefaultAllowUserInteraction, getDefaultRequestProperty, getDefaultUseCaches, getDoInput, getD

cris.joongbu.ac.kr

https://digitalbourgeois.tistory.com/57?category=678387

 

[JAVA] HttpURLConnection로 REST API 호출하기

이번 페이지에서는 HttpURLConnection을 이용해 REST API를 호출하는 방법을 알아보자. [GET] public void get(String strUrl) { try { URL url = new URL(strUrl); HttpURLConnection con = (HttpURLConnection)..

digitalbourgeois.tistory.com

https://juyoung-1008.tistory.com/4

 

MIME-Type,Content-Type이란?

MIME이란? MIME이란? Multipurpose Internet Mail Extensions의 약자로 간략히 말씀을 드리면 파일 변환을 뜻한다. MIME는 이메일과 함께 동봉할 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위..

juyoung-1008.tistory.com

 

300x250

댓글