'Java'에 해당되는 글 2건

  1. 2020.10.27 [JAVA] command 실행 샘플 로직
  2. 2020.10.24 [JAVA] REST API 방법 총정리

프로젝트를 진행하다보면 가끔 cmd 명령을 날리는 로직이 필요할때가 있다. 

대부분 운영 환경은 리눅스일것이고

개발환경(로컬)은 윈도우일 것이다.

오늘은 java 환경에서 cmd 명령을 날리는 샘플 로직을 만들어 보겠다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//1.실행할 명령어 배열 변수에 담기
 
String param1 = "test1.xml";
String param2 = "test2.xml";
String param3 = "test3.xml";
 
//cmd 명령창에서 python test1.xml test2.xml test3.xml  명령을 실행하는것과 똑같다.
String[] cmdArrayWindow = {"python",param1,param2,param3};
 
//리눅스일 경우 해당 명령어 실행(윈도우와 리눅스를 구분해야 할 경우)
String[] cmdArrayLinux = {"python3",param1,param2,param3};
 
String firstLine = null;
 
//시스템이 윈도우인지 리눅스 인지 판단
if(System.getProperty("os.name").indexOf("Windows")>-1{
    Process p = Runtime.getRuntime().exec(cmdArrayWindow);
BufferReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"euc-kr"));
 
firstLine = br.readLine();
 
}else{
    Process p = Runtime.getRuntime().exec(cmdArrayLinux);
BufferReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"euc-kr"));
firstLine = br.readLine();
}
 
System.out.prinln(firstLine);
cs
 
 
 

윈도우와 리눅스 환경을 구분하여 수행되는 명령어를 분기를 나눴다.

그리고 명령어 수행된후 리턴되는 값은 

한줄이라는 가정하에 한번만 읽어들여 String 변수값에 넣어 줬다. 

만약 리턴되는 값이 여러줄이라면 마지막

firstLine 변수에 집어 넣는 로직을 조금 수정해주면 되겠다.

 

이 포스팅이 도움이 되셨다면 좋아요 한번눌러주세요.^^;

 

Posted by by.타니
,

프로젝트를 진행하던중 AWX라는 시스템에 요청을 하여 응답해주는 JSON 응답값을 받아야 하는 기능이 필요했다.

 

그래서 서버단에서 URL을 요청하는 로직을 구현해야 했다. 

결과적으로 URL마지막에 "/"를 붙이지 않아 오랜 삽질을 하는 바람에 JAVA 단에서 REST API 를 호출 하는 방법을 전부 알게 되었다.

 

"/" 하나 때문에 1주일을 고생을 했다.

AWX 서버가 원망스러웠다. 

URL 마지막에 "/" 하나가 없다고 401(인증에러) 응답이 왔던 것이다 

 

만약 그런 URL이 없다고 응답이 왔으면 바로 수정했었을텐데...


아무튼 총 3가지 방법이 있다.

 

1.HttpURLConnection

 

2.HttpClient

 

3.스프링 RestTemplate

 

[sample Code]

1.HttpURLConnection 방식

URL url = new URL("요청하고 싶은 url");

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



//인증방식에는 두가지가 있다.

//1. 토큰 방식

//2. ID / PW 를 Base64 로 인코딩하는 방식



//1.id / pw 방식

//아이디와 비밀번호를 아래와 같은 방식으로 String 에 넣는다.

//String auth = "awxapi:ds2pass1!";

//byte[] authEncBytes = Base64.encodeBase64(auth.getBytes());

//String authStringEnc = new String(authEncBytes);



//Basic 한칸 뛰고 인코딩된 id /pw

//conn.setRequestProperty("Authorization","Basic "+authStringEnc);



//2. 토큰 방식

String AwxHeaderToken = "Bearer "+"토큰값"



conn.setRequestProperty("POST");

conn.setRequestProperty("Authorization",AwxHeaderToken);

conn.setRequestProperty("Content-Type","application/json");

conn.setRequestProperty("Accept","application/json");

conn.setConnectTimeout(5000);

conn.setDoOutput(true);



//요청시 body 사용할경우

OutputStream os = conn.getOutputStream();

os.write(epReqBody.getBytes());'

os.flush();



conn.connect();



System.out.println(conn.getResponseMessage());

int responseCode = conn.getResponseCode();

 

 

 

 

2.HttpClient 방식

 

[GET]

public void get(String requestURL) {

  try {

          HttpClient client = HttpClientBuilder.create().build(); // HttpClient 생성

          HttpGet getRequest = new HttpGet(requestURL); //GET 메소드 URL 생성

          getRequest.addHeader("x-api-key", RestTestCommon.API_KEY); //KEY 입력



          HttpResponse response = client.execute(getRequest);



          //Response 출력

          if (response.getStatusLine().getStatusCode() == 200) {

          ResponseHandler<String> handler = new BasicResponseHandler();

          String body = handler.handleResponse(response);

          System.out.println(body);

          } else {

          System.out.println("response is error : " + response.getStatusLine().getStatusCode());

          }



  } catch (Exception e){

      System.err.println(e.toString());

  }

}

 

[POST]

public void post(String requestURL, String jsonMessage) {

  try {

        HttpClient client = HttpClientBuilder.create().build(); // HttpClient 생성

        HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성

        postRequest.setHeader("Accept", "application/json");

        postRequest.setHeader("Connection", "keep-alive");

        postRequest.setHeader("Content-Type", "application/json");

        postRequest.addHeader("x-api-key", RestTestCommon.API_KEY); //KEY 입력

        //postRequest.addHeader("Authorization", token); // token 이용시



        postRequest.setEntity(new StringEntity(jsonMessage)); //json 메시지 입력



        HttpResponse response = client.execute(postRequest);



        //Response 출력

        if (response.getStatusLine().getStatusCode() == 200) {

        ResponseHandler<String> handler = new BasicResponseHandler();

        String body = handler.handleResponse(response);

        System.out.println(body);

        } else {

        System.out.println("response is error : " + response.getStatusLine().getStatusCode());

        }

  } catch (Exception e){
      System.err.println(e.toString());
  }

}

 

3.스프링 RestTemplate

 

RestTemplate restTemplate = new RestTemplate();

String loginUrl = "http://localhost:8080/organizeme/j_spring_security_check";

String username = "izeye";

String password = "1234";

MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();

parameters.add("j_username", username);

parameters.add("j_password", password);

ResponseEntity<String> responseEntity = restTemplate.postForEntity(loginUrl, parameters,

String.class);

System.out.println(responseEntity);

 

Map의 경우에는 파라미터가 아니라 JSON으로 전송됨에 주의해야합니다.

 

 

 

 

 

 

 

 

 

Posted by by.타니
,