본문 바로가기
Linux/Linux Shell Command

curl

by 드로니뚜벅이 2022. 4. 29.

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

 

 

 

참고사이트