728x90
반응형
우선 JDK 1.8 환경에선 HttpClient가 import 되지 않는다. 이유는 모르겠지만 JDK 1.6, 1.7, 11, 17 버전 등에선 잘 동작하니 1.8를 피해서 진행해주면 된다.
HttpURLConnection, HttpClient를 사용해서 서버간 통신을 진행하며, json 데이터를 보내주고 결과 값을 받아오는 코드를 작성해 보겠다. 진행해주기 전에 서버 방화벽을 한번 확인해주고 진행해주자
서버간 통신을 진행할 시 체크 사항을 잘 알려주는 사이트이니 필요하다면 참고해서 진행하면 된다.
https://junspapa-itdev.tistory.com/32
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 |