cURL ?
curl(client url)은 사용자 상호 작용 없이 작동하도록 설계된 서버에서 또는 서버로 데이터를 전송하기 위한 명령행 기반 웹 요청 유틸리티입니다. 즉, 다양한 프로토콜을 사용해 URL로 데이터를 전송하여 서버에서 데이터를 가져오거나 보낼 때 사용하는 툴입니다. curl을 사용하면 HTTP, HTTPS, SCP , SFTP 및 FTP 등 지원되는 프로토콜 중 하나를 사용하여 데이터를 다운로드하거나 업로드할 수 있습니다. curl은 전송을 재개하고 대역폭을 제한하며 프록시 지원, 사용자 인증 등을 수행할 수 있는 다양한 옵션을 제공합니다.
이러한 장점 때문에 클라이언트를 코딩을 시작하기 전에 curl 명령어로 서버 동작을 먼저 확인함으로써 좀 더 빠르게 개발을 진행할 수 있습니다. 특히 REST API 기반의 애플리케이션을 개발 테스트시에 유용하게 사용할 수 있습니다.
curl 설치
대부분의 리눅스 배포판에는 기본적으로 curl 이 설치되어 있습니다. 혹시 설치되어 있지 않다면 아래 명령어로 설치를 합니다.
$ sudo apt update
$ sudo apt install curl
curl 옵션 (명령어 형식: $ curl [options] [url])
Option | Description | |
-X | --request | 요청 시 사용할 메소드를 선택합니다. 메소드 종류: GET, POST, PUT, PATCH, DELETE |
-d |
--data | HTTP POST 요청 데이터를 입력합니다. (함께 전달할 파라미터 값을 설정합니다.) |
$ curl -d 'key=value' -d 'type=school' https://www.example.com | ||
$ curl -H 'Content-Type: application/json' -d '{"key": "value"}' https://www.example.com | ||
-D |
--dump-header <file> | HTTP 헤더를 file에 기록합니다. |
-G | 전송할 사이트 URL 및 IP 주소를 지정합니다. | |
-H | 헤더 정보를 전달합니다. | |
-I |
--head | 사이트의 Header 정보만 가져옵니다. (콘텐츠는 보여주지 않음) |
$ curl -I --http2 https://www.ubuntu.com/ | ||
-i | --include | 사이트의 Header와 Body 정보를 함께 가져옵니다. (디버깅에 유용합니다) |
-u | --user | 사용자 정보(이름, 비밀번호)를 지정합니다. |
-v | --verbose | 동작하면서 자세한 내용을 출력합니다. 요청하는 헤더와 요청, 그리고 응답으로 오는 헤더와 내용(body)을 전부 확인할 수 있습니다. 리다이렉트되는 페이지를 확인하려면 헤더까지 확인하지 않으면 제대로 알 수 없는데 이럴 때 쓸 만합니다. |
-s | --silent | 명령어를 실행하는 동안 출력되는 메시지를 표시하지 않습니다. (silent mode) HTTP response code만 가져오거나 할 경우에 유용합니다. |
-S | 에러 메시지를 출력합니다. 주로 -sS 옵션으로 사용하여 명령어를 실행하는 동안 메시지를 출력하지 않지만 에러가 발생한 경우에는 출력하도록 설정합니다. | |
-o |
--output FILE | curl로 받아온 내용을 FILE이라는 이름의 파일로 저장합니다. |
-O |
--remote-name | 파일 저장 시 리모트에 저장되어 있는 이름을 그대로 가져와서 로컬에 저장합니다. 여러 파일을 한번에 다운로드 합니다. (숫자 '0'이 아니고 영어 대문자 'O' 입니다) |
$ curl -O https://releases.ubuntu.com/focal/ubuntu-20.04.5-live-server-amd64.iso \ -O https://releases.ubuntu.com/focal/ubuntu-20.04.5-desktop-amd64.iso |
||
-C |
--continue-at | 대용량 파일을 다운로드하다가 접속이 끊어졌을 대 다운로드를 재개할 때 사용합니다. |
$ curl -C - -O https://releases.ubuntu.com/focal/ubuntu-20.04.5-live-server-amd64.iso | ||
-k |
--insecure | https 프로토콜에서 SSL 인증서에 대한 검증없이 연결합니다. |
-L |
--location | HTTP 301, 302 응답을 받은 경우 리디렉션 URL로 따라갑니다. --max-redirs 옵션 뒤에 숫자로 몇 번의 리디렉션까지 따라갈 것인지를 적을 수 있습니다. (기본값은 50 입니다) |
-J |
--remote-header-name | 헤더에 있는 파일 이름으로 다운로드 파일을 저장합니다. |
-A |
--user-agent | 서버에 User-Agent <name> 을 보냅니다. |
-T |
--upload-file | 로컬 FILE을 대상으로 서버에 전송합니다. |
-f |
--fail | HTTP 오류 시 자동으로 실패합니다. (출력 없음) |
서버의 파일 이름 변경없이 다운로드
서버에 올라간 파일을 그대로 다운로드 하는 것은 -O (대문자) 옵션을 사용할 수 있습니다. https://exmaple.com/test.zip파일이름 변경 없이 그대로 test.zip파일로 다운로드 받는 경우입니다.
$ curl -O https://example.com/test.zip
GET 요청
아무 옵션을 적지 않은 경우 기본적으로 GET으로 동적합니다.
$ curl https://www.naver.com
$ curl -X GET www.naver.com
POST 요청
-d 옵션으로 body 파라미터를 앞에 쓰고, 다음에 POST를 처리할 주소를 입력합니다.
파라미터는 반드시 인코딩된 상태여야 합니다.
기본 Content-Type은 "application/x-www-form-urlencoded" 입니다.
[URL 형식 데이터]
$ curl -d "key1=value1&key2=value2" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://www.sample.com
[JSON 형식 데이터]
$ curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-type: application/json" -X POST http://www.sample.com
참고사이트
'Linux > Linux Shell Command' 카테고리의 다른 글
tree - 디렉터리 및 파일을 트리 형식으로 출력 (0) | 2022.05.01 |
---|---|
nice - 프로세스간 실행 우선순위 (0) | 2022.04.30 |
touch - 빈 파일 생성 및 파일 날짜 변경 (0) | 2022.04.27 |
file - 파일 종류 및 속성 확인하기 (0) | 2022.04.27 |
ulimit - 리눅스에서 자원(리소스)의 제한 설정 관련 명령어 (0) | 2022.04.26 |