반응형
cURL을 이용하여 다양한 통신 프로토콜에 데이터를 전송할 수 있습니다.
일반적으로 웹 서비스 개발 시 테스트 및 디버깅 용도로 많이 사용되고 cmd에서 실행 가능하므로 웹 요청에 필요한 배치 작업을 자동화할 수 있습니다.
옵션
short | long | Discription | etc |
-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 기반의 웹서비스 디버깅시 유용한 옵션이다 |
-G | --get | HTTP GET data를 전송한다. | |
-X | --request | Request method를 지정한다. | 기본 값 = POST |
-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 만 가져오거나 할 경우 유리 |
-b | --cookie | 쿠키 값을 전송한다. | |
-H | --header | Content-Type을 지정한다. | |
--trace-ascii HTTP | 데이터 통신 과정의 상세 정보를 출력한다. |
사용 예제 (데이터 요청)
GET 요청
curl -G http://webisfree.com/action/?param1=value1&m2=value2
POST 요청
예제 ①
curl http://test.com/post -d param1=value1 -d param2=value2
예제 ② curl http://test.com/post -d "param1=value1&m2=value2"
SSL 인증서 검증
curl은 https 사이트의 SSL 인증서를 검증한다.
인증서 목록이 없거나 알 수 없는 기관에서 발급한 인증서는 다음과 같은 인증서 검증 에러를 발생시킨다.
curl: (77) schannel: next InitializeSecurityContext failed:
SEC_E_UNTRUSTED_ROOT (0x80090325) - 신뢰되지 않은 기관에서 인증서 체인을 발급했습니다.
아래처럼 HTTPS 검증을 하지 않는 옵션을 사용하거나 인증기관 목록을 추가하여 해결한다.
curl -k https://test.com/
프로토콜 디버깅 (통신과정 확인)
curl --trace-ascii test.dump http://www.test.com/test
Content-Type 지정
① 폼 데이터 전송
curl http://test.com/post -d "param1=value1&m2=value2" -H "Content-Type: application/x-www-form-urlencoded"
① JSON 데이터 전송
curl http://test.com/post -H "Content-Type: application/json" -d '{"key1":"value1", "key2":"value2"}'
쿠키 값 지정
curl http://test.com/home -b "JSESSIONID=7A22ABF5FBA40538BD06A97FFA815F7E"
사용 예제 (데이터 받기)
응답을 파일에 쓰기
$ curl http://jeonkkochbi.tistory.com/resource > foo.txt
그냥 옵션 없이 curl를 사용하면 표준출력으로 request 출력,
그러므로 예제처럼 리다이렉트해서 바로 파일에 쓸 수 있다.
// -o : 파일이름 변경하여 저장
$ curl -o foo.txt http://jeonkkochbi.tistory.com/foo.txt
// -O : 파일이름 그대로 저장
$ curl -O foo.txt http://jeonkkochbi.tistory.com/foo.txt
여러 파일을 다운로드
$ curl -O http://jeonkkochbi.tistory.com/foo[0-9].txt
$ curl -O http://jeonkkochbi.tistory.com/foo-[a-z][0-9].txt
- foo0.txt 부터 foo9.txt 파일을 다운로드 받는 것도 가능하며,
- []는 여러 번 조합할 수 있고, foo-a0.txt 부터 foo-z9.txt 까지 파일을 내려받습니다.
$ curl -O http://jeonkkochbi.tistory.com/{foo,bar,baz}.txt
- 중괄호를 써서 리스트(list)자료형을 호출할 수도 있다. foo.txt, bar.txt, baz.txt 를 다운로드 받는다.
shell 의 for문 활용 (고급)
$ files="foo bar baz"
$ for name in files; do
curl -O "http://jeonkkochbi.tistory.com/${name}.txt"
done
참고
- curl , wget 으로 다이렉트 다운로드 해보자!: https://jeonkkochbi.tistory.com/43
- curl 설치 및 사용법 - HTTP GET/POST, REST API 연계등: https://www.lesstif.com/software-architect/curl-http-get-post-rest-api-14745703.html
- [Tistory] cURL을 이용한 데이터 전송: https://jdh5202.tistory.com/789
- 리눅스 curl : command line 웹 요청 명령어: https://www.leafcats.com/188
- [전꽃비블로그:티스토리]: https://jeonkkochbi.tistory.com/43
반응형
'Study: ComputerScience(CS) > CS: Linux' 카테고리의 다른 글
[Linux] 리눅스 디렉토리(폴더) 구조: /home, /bin, /etc, /usr... (0) | 2022.07.25 |
---|---|
[Linux] 리눅스 *.so.* 파일 경로: 동적 라이브러리 링킹하는 방법 (feat. 정적(static) vs 동적(dynamic)) (2) | 2022.07.23 |
[Linux] 리눅스 프로세스 프로그래밍: fork() 자식 프로세스 생성하기 (0) | 2022.07.19 |
[Linux] 리눅스 네트워크 상태 확인 (feat. ping, netstat...) (0) | 2022.07.19 |
[Linux] 리눅스 wget vs curl: 웹 서버로부터 컨텐츠를 가져오자! (0) | 2022.07.19 |