https://docs.oracle.com/javase/8/docs/api/index.html?help-doc.html
구글링도 좋지만 Api 확인을 생활화 하자(Process , ProcessBuilder 참고)
cURL 은 서버와 통신 할 수 있는 커맨드 명령어 툴이다
가장 많이 사용하는 프로토콜로는 HTTP/HTTPS 가 대표적이다
CMD(명령 프롬프트) - cURL 실행
Java 에서 cURL 실행
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class RunTestController {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = null;
Process process = null;
InputStream in = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
try {
// 예시) curl --location --request GET http://www.google.co.kr
// 옵션 값을 따로 이용할까 하여 각각 변수를 나누어 놓았으나 그냥 List에 add 시켜도 된다
String url = "http://www.google.co.kr";
String firstOption = "--location";
String secondOption = "--request";
String thridOption = "GET";
String curl ="curl " + firstOption + " " + secondOption + " " + thridOption + " " + url;
ArrayList<String> list = new ArrayList<>();
// cmd 를 넣어줘야 실행이 될 것으로 생각했으나 기본적으로 cmd 실행이 됨
//list.add("cmd.exe");
list.add("curl");
list.add(firstOption);
list.add(secondOption);
list.add(thridOption);
list.add(url);
// java 8 Api 문서 참조 ProcessBuilder
builder = new ProcessBuilder();
// List<String> 타입
builder.command(list);
// String... 타입
//builder.command("cmd.exe", "/c" , curl);
process = builder.start();
in = process.getInputStream();
// UTF-8 인데 한글이 깨짐
//inputStreamReader = new InputStreamReader(in, "UTF-8");
inputStreamReader = new InputStreamReader(in, "MS949");
bufferedReader = new BufferedReader(inputStreamReader);
String line = null;
while((line = bufferedReader.readLine()) != null){
System.err.println(line);
}
}catch (Exception e){
e.printStackTrace();
}finally {
// 순서대로 열고 마지막부터 닫아준다
// 코드를 간결하게 줄이기보다는 동작하는 원리와 닫아줌을 생활화 하자
if (bufferedReader != null){
bufferedReader.close();
}
if (inputStreamReader != null){
inputStreamReader.close();
}
if(in != null){
in.close();
}
if(process != null){
process.destroy();
}
if(builder != null ){
builder = null;
}
}
}
}
저번에 한 Https 와 비슷하다
주요 옵션
short | long | 설명 | 비고 |
-k | --insecure | https 사이트를 SSL certificate 검증없이 연결한다. | wget 의 --no-check-certificate 과 비슷한 역할 수행 |
-l | --head | HTTP header 만 보여주고 content 는 표시하지 않는다 | |
-D | --dump-header <file> | <file> 에 HTTP header 를 기록한다. | |
-L | --location | 서버에서 HTTP 301이나 HTTP 302 응답이 왔을 경우 redirection URL 로 따라간다. --max-redirs 뒤에 숫자로 redirection 을 몇 번 따라갈지 지정할 수 있다. 기본 값은 50이다 |
curl -v daum.net 을 실행하면 결과값으로 다음과 같이 HTTP 302 가 리턴된다.
< HTTP/1.1 302 Object Moved
< Location: http://www.daum.net/ |
-d | --data | HTTP Post data | FORM 을 POST 하는 HTTP나 JSON 으로 데이타를 주고받는 REST 기반의 웹서비스 디버깅시 유용한 옵션이다 |
-v | --verbose | 동작하면서 자세한 옵션을 출력한다. | |
-J | --remote-header-name | 어떤 웹서비스는 파일 다운로드시 Content-Disposition Header 를 파싱해야 정확한 파일이름을 알 수 있을 경우가 있다. -J 옵션을 주면 헤더에 있는 파일 이름으로 저장한다. | curl 7.20 이상부터 추가된 옵션 |
-o | --output FILE | curl 은 remote 에서 받아온 데이타를 기본적으로는 콘솔에 출력한다. -o 옵션 뒤에 FILE 을 적어주면 해당 FILE 로 저장한다. (download 시 유용) | |
-O | --remote-name | file 저장시 remote 의 file 이름으로 저장한다. -o 옵션보다 편리하다. | |
-s | --silent | 정숙 모드. 진행 내역이나 메시지등을 출력하지 않는다. -o 옵션으로 remote data 도 /dev/null 로 보내면 결과물도 출력되지 않는다 | HTTP response code 만 가져오거나 할 경우 유리 |
-X | --request | Request 시 사용할 method 종류(GET, POST, PUT, PATCH, DELETE) 를 기술한다. | |
-i | --include | 응답에 Content 만 출력하지 않고 서버의 Reponse 도 포함해서 출력한다. (디버깅에 유용) |
해당 사이트 참고함 https://www.lesstif.com/software-architect/curl-http-get-post-rest-api-14745703.html
'개발 > Java' 카테고리의 다른 글
[Java] JDBC Connection - 자바와 DB 연결하기 (0) | 2023.06.08 |
---|---|
[Java] 단방향 암호화 하기 - SHA256 (0) | 2023.05.26 |
[Java] Thread(스레드) - 생성, 실행, 종료 하기 , 에러 해결 (0) | 2023.05.13 |
[Java] ExcelUpload - 파일 읽고 DB에 insert 하기 (0) | 2023.05.11 |
[Java] google json-simple 사용하기 (0) | 2023.05.08 |
댓글