본문 바로가기

JAVA

[JAVA] HttpURLConnection, HttpClient 사용하기

반응형

우선 JDK 1.8 환경에선 HttpClient가 import 되지 않는다. 이유는 모르겠지만 JDK 1.6, 1.7, 11, 17 버전 등에선 잘 동작하니 1.8를 피해서 진행해주면 된다.

 

HttpURLConnection, HttpClient를 사용해서 서버간 통신을 진행하며, json 데이터를 보내주고 결과 값을 받아오는 코드를 작성해 보겠다. 진행해주기 전에 서버 방화벽을 한번 확인해주고 진행해주자

 

서버간 통신을 진행할 시 체크 사항을 잘 알려주는 사이트이니 필요하다면 참고해서 진행하면 된다.

https://junspapa-itdev.tistory.com/32

 

서버 to 서버간 통신(http, https) 로직 개발시 체크해야할 사항

자바 내부 로직에 다른 서비스의 API를 호출해서 사용하는 로직을 개발한 적이 있었습니다. 로컬 개발환경에서는 테스트가 잘 되었는데 통합테스트 환경에서는 작동을 안하더군요. 그 때 오류

junspapa-itdev.tistory.com

 

 

 

 

 

1. HttpUrlConnection 통신

// GET 통신

String serverUrl = "통신할 URL 주소";

URL url = new URL(serverUrl);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");

conn.setRequestProperty("Content-type", "application/json");
conn.setConnectTimeout(20000);

BufferedReader br;
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
    br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
    br = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}

StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
    sb.append(line);
}

br.close();
conn.disconnect();

System.out.println(sb.toString()); // 최종 스트링 값 확인

 

 

// POST 통신

String serverUrl = "통신할 URL 주소";

JSONObject jsonData = new JSONObject();

jsonData.put("data1", "testData1");
jsonData.put("data2", "testData2");
String jsonData = jsonData.toString();

URL url = new URL(serverUrl);		

HttpURLConnection conn = null;
OutputStream os = null;
BufferedReader br = null;

conn = (HttpURLConnection)url.openConnection();

conn.setConnectTimeout(20000);					
conn.setReadTimeout(20000);						
conn.setDoOutput(true);							

conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");	
conn.setRequestProperty("Accept", "application/json");						
conn.setRequestMethod("POST");

os = conn.getOutputStream();
os.write(jsonData.getBytes("utf-8"));
os.flush();
os.close();

if(conn.getResponseCode() == 200){
    br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
}else{
    br = new BufferedReader(new InputStreamReader(con.getErrorStream(), "UTF-8"));				
}

if(br != null) {
    StringBuilder sb = new StringBuilder();
    String line = "";

    while((line = br.readLine()) != null){
        sb.append(line);
    }
    br.close();

    String str = sb.toString();

    JSONParser jsonParser = new JSONParser();
    JSONObject jsonObj = (JSONObject)jsonParser.parse(str);
}

System.out.print(jsonObj); // 최종 JSON 데이터 확인

 

728x90
반응형

 

 

 

 

 

 

 

 

2. HttpClient 통신

// GET 통신

String serverUrl = "통신할 URL 주소";

URI uri = URI.create(serverUrl);

HttpClient httpClient = HttpClient.newHttpClient();
		
HttpRequest req = HttpRequest.newBuilder()
        .uri(uri)
        .GET()
        .header("Content-Type", "application/json;charset=utf-8")
        .timeout(Duration.ofSeconds(20000))
        .build();
HttpResponse<String> res = httpClient.send(req, HttpResponse.BodyHandlers.ofString());

if(res.statusCode() == 200) {
    String responseBody = res.body();

    System.out.print(responseBody); // 최종 스트링 값 확인
}

 

 

// POST 통신

String serverUrl = "통신할 URL 주소";

JSONObject jsonData = new JSONObject();

jsonData.put("data1", "testData1");
jsonData.put("data2", "testData2");
String jsonData = jsonData.toString();

HttpClient httpClient = HttpClient.newHttpClient();
		
HttpRequest req = HttpRequest.newBuilder()
        .header("Content-Type", "application/json;charset=utf-8")
        .header("Accept", "application/json")
        .timeout(Duration.ofSeconds(20000))
        .POST(HttpRequest.BodyPublishers.ofString(jsonData))
        .uri(URI.create(serverUrl))
        .build();
HttpResponse<String> res = httpClient.send(req, HttpResponse.BodyHandlers.ofString());

if(res.statusCode() == 200) {
    String responseBody = res.body();

    JSONParser parser = new JSONParser();        
    JSONObject jsonObj = (JSONObject) parser.parse(responseBody);

    System.out.print(jsonObj); // 최종 JSON 데이터 확인
}

 

 

 

header와 timeout은 꼭 작성해주지 않아도 정상적으로 잘 동작되니 필요할 경우에만 추가해서 사용해주자

 

 

 

 

 

 

 

728x90
반응형

'JAVA' 카테고리의 다른 글

[JAVA] 이메일 인증 구현하기  (0) 2024.07.19
[JAVA] 공공데이터 오픈 API 사용하기  (0) 2024.06.25