👉 JSON 문자열을 이용한 POST 요청 구현
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpGetRequest {
public static void main(String[] args) throws IOException {
URL url = new URL("https://www.example.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json");
String jsonInputString = "{\"MSG_HEADER\":{},\"MSG_BODY\":{\"USER_ID\":\"EXAMPLE\",\"USER_SECRET\":\"SECRET_EXAMPLE\"}}";
try(OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
int responseCode = connection.getResponseCode();
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
}
}
👉 코드 해석 : OutputStream과 JSON 데이터 처리
try(OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
- try 블럭 안에서 OutputStream 객체를 생성하는 이유
- 자원을 자동으로 관리하기 위해서
- 블럭이 끝나면 OutputStream 객체가 자동으로 닫힘
- OutputStream의 역할
- getOutputStream을 호출하면 서버로 데이터를 보낼 수 있는 OutputStream 객체가 생성됨
- OutputStream은 데이터 전송 매개체로서의 역할로 출력 스트림을 얻어 서버로 데이터를 전송하는데 사용
- JSON 문자열을 바이트 배열로 변환하는 이유
- 데이터를 바이트로 변환해야지 네트워크를 통해 서버에 전송할 수 있음
- 서버에 어떤 텍스트나 파일을 보내고 싶다면, 이를 바이트로 변환한 후 이 스트림을 통해 전송해야 함
- write() 메서드의 역할
- 변환된 바이트 데이터를 OutputStream에 씀
- write() 메서드를 사용하여 OutputStream에 데이터를 쓰면, OutputStream의 내부 버퍼에 저장되고 버퍼가 가득 차면 네트워크를 통해 데이터 전송
- OutputStream을 닫을 때, 부적으로 flush()가 호출되어 남아 있는 모든 데이터가 전송됨
👉 JSON 객체를 이용한 POST 요청 구현
import org.json.JSONObject;
import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
public class GetAccessTokenRequest {
public static void main(String[] args) throws IOException {
URL url = new URL( "https://www.example.com" );
HttpsURLConnection connection = ( HttpsURLConnection ) url.openConnection();
connection.setRequestMethod( "POST" );
connection.setDoOutput( true );
connection.setRequestProperty( "Content-Type", "application/json" );
JSONObject requestHeader = new JSONObject();
JSONObject requestBody = new JSONObject();
requestBody.put("USER_ID", "EXAMPLE");
requestBody.put("USER_SECRET", "SECRET_EXAMPLE");
JSONObject jsonRequest = new JSONObject();
jsonRequest.put("MSG_HEADER", requestHeader);
jsonRequest.put("MSG_BODY", requestBody);
try( OutputStream os = connection.getOutputStream() ) {
byte[] input = jsonRequest.toString().getBytes( "utf-8" );
os.write( input, 0, input.length );
}
int responseCode = connection.getResponseCode();
System.out.println( "Response Code : " + responseCode );
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
JSONObject jsonResponse = new JSONObject(response.toString());
System.out.println(jsonResponse.toString(4));
}
}
- JSON OBJECT는 Gradle이나 Maven에 의존성을 추가해줘야 함