리눅스 서버에서 특정 URL을 호출하여 HTML 파일을 생성하는 기능이 필요하여

curl 을 활용하여 구현하였다.


문제는 터미널로 리눅스 서버에 접속해 curl 명령을 입력하면 정상적으로 수행되나

서버 프로그램에서 Runtime.getRuntime().exec() 함수를 이용하여 수행하면

아래와 같은 오류가 발생하였다.


- 수행구문

String command = "curl \"http://계정명:패스워드@123.5.6.789:8080/ex?exParam=exValue&exParam2=exValue2\"";


Runtime.getRuntime().exec(command);


- 오류 메시지

curl: (1) Protocol "http not supported or disabled in libcurl



구글 검색 및 테스트를 하여 얻은 정보는 아래와 같다.


1. Windows OS 에서는 url 부분은 " 쌍따옴표로 감싸야 한다.

2. URL을 GET 방식으로 파라미터를 작성하게 되면 두번째 파라미터부분은 정상적으로 전달되지 않는다.

   ex) www.test.com?a=1&b=2 에서 b=2 파라미터는 누락된다.

3. URL을 쌍따옴표나 따옴표로 감싸게 될 경우 해당 문자 자체가 URL의 일부로 인식하는 경우도 있다.

    리눅스에서 JAVA를 통해 실행될 경우 발생하였다.

   -> 나의 경우는 이 케이스 때문에 오류가 발생하였고 URL을 감싸고 있는 " ' 문자를 제거해 주었다.

       에러문구에서 "http 프로토콜은 지원되지 않는다고 알럿 주고 있으며 " 문자를 URL의

       일부로 인식하고 있다는 증거이다.


- 변경 후 수행구문

String command = "curl --user 계정명:패스워드 --request POST http://123.5.6.789:8080/ex --data 'exParam=exValue&exParam2=exValue2'";


Runtime.getRuntime().exec(command);


위와 같이 URL파라미터를 --data 옵션을 주어서 별도로 표기하였고, URL을 감싸는 " 문자를 제거 해주었다.

변경하니 정상적으로 실행되었다.




WRITTEN BY
Dukejin
If you don't walk today, you will have to run tomorrow. Try hard, Try hard!

,