본문 바로가기
SW 개발/REST API

자주 사용하는 curl 명령어 옵션과 예제

by Kibua20 2021. 6. 13.

curl은 오픈 소스로 개발되어 윈도우와 리눅스에 기본 설치되고 있는 웹 개발 툴로써 http, https, ftp, sftps, smtp, telnet 등의 다양한 프로토콜과 Proxy, Header, Cookie 등의 세부 옵션까지 쉽게 설정할 수 있습니다.

이러한 장점 때문에 Client를 코딩을 시작하기 전에 curl 명령어로 서버 동작을 먼저 확인함으로써 좀 더 빠르게 개발을 진행할 수 있습니다.

본 포스팅은 curl 옵션 중 자주 사용하는 옵션 위주로 예제와 설명을 정리하였습니다.

연속된 URL 로 요청하고 결과 파일로 지정하기

네이버나 카카오의 HLS 동영상을 다운로드할 때 연속된 URL을 하나의 명령어로 처리할 수 도 있습니다.

$ curl "https://example_url/[000001-000188].m4s" -o "#1.m4s"
→ https://example_url/000001.m4s~000188.m4s 까지 연속적으로 접속해서 결과를 000001.m4s ~ 000184.m4s로 저장. curl로 네이버나 카카오TV의 동영상 받을 때 유용합니다.

curl 명령어 사용: 출처  https://curl.haxx.se/docs/manpage.html

 

curl 명령어 사용: 출처  https://curl.haxx.se/docs/manpage.html


Proxy 서버 지정

Proxy 서버는 -x 옵션으로 지정 가능합니다. Win10에서는 https proxy는 미 지원합니다.

curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url.examle

curl proxy 옵션

 

Http Header에 Bearer token을 포함하여 POST 명령어

http://example.com/api로 Bearer Token을 Authorization 값으로 실어서 data.json 내용으로 POST하는 명령어입니다. OAutho 2.0 명령어 테스트 시 유용합니다.

curl -X POST\
-H Content-Type:application/json\
-H Authorization: Bearer abcdbdg\
-d @data.json\

http://example.com/api

curl 옵션 설명
-X, --request <command> Specify request command to use
-H, --header HTTP Header에 에 추가. 위 예제에서는 Content-Type:application/json 과 Authorization: Bearer abcdbdg을 추가함
-d, --data <data> HTTP POST data
--data-ascii <data> HTTP POST ASCII data
--data-binary <data> HTTP POST binary data

 

File Upload 명령어

-T 옵션을 사용해서 파일을 서버에 전송할 수 있습니다. -T 옵션을 사용하는 경우 PUT으로 처리합니다.

curl -T file.txt http://exsample.com

curl 옵션 설명
-T, --upload-file <file> Transfer local FILE to destination

User Agent를 변경하는 명령어

curl 명령어는 기본적으로 ser-Agent: curl/7.68.0 값으로 설정합니다. user agent를 변경해야 하는 경우 -A 또는 --user-agent 옵션을 사용합니다.

$ curl -v - A "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.3 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36" http://example.com

> GET / HTTP/1.1
> Host: 193.122.101.209
> User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.3 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36
> Accept: */*

참고로, Chrome에서 User agent는 ① Chrome에서는 개발자 메뉴(F12), Console tab, navigator.userAgent 명령어로 확인이 가능합니다.

curl 옵션 설명
-A, --user-agent <name> Send User-Agent <name> to server
-v, --verbose Make the operation more talkative


User-agent 확인 사이트
httpbin.org/headers에서는 client 언트에서 전달하는 User-agent를 그대로 출력합니다. User-agent가 정상적으로 세팅되어 있는지 확인할 때 유용합니다.

$ curl httpbin.org/headers

(응답)

{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.68.0",
"X-Amzn-Trace-Id": "Root=1-5ffe5788-6ecf91aa032844a57c6f0018"
}
}

서버의 응답을 결과물로 출력

서버 응답의 헤더를 -i 옵션을 사용하여 출력할 수 있습니다

$ curl -i http://naver.com

서버 응답을 output으로 출력


curl 옵션 설명
-i, --include Include protocol response headers in the output

서버의 파일 이름 변경 없이 다운로드

서버에 올라간 파일을 그대로 다운로드 하는 것은 -O (대문자) 옵션을 사용할 수 있습니다. https://exmaple.com/test.zip파일이름 변경 없이 그대로 test.zip파일로 다운로드 받는 경우입니다.

$ curl -O https://example.com/test.zip

-O, --remote-name Write output to a file named as the remote file
--remote-name-all Use the remote file name for all URLs

Redirect URL을 따라가는 명령어

서버 림크가 다시 다른 URL로 re-direct되어 있는 경우 -L 옵션을 사용할 수 있습니다. 예를 들어 https://exmaple.com/url_org이 http://example.com/url_redirect로 연결되어 있다면 url_redirect까지 접속하는 명령어 입니다.

$ curl -L https://exmaple.com/url_org
https://exmaple.com/url_org가 가르키는 redirect URL(https://exmaple.com/url_redirect) 까지 접속함

-L, --location Follow redirects
--location-trusted Like --location, and send auth to other hosts
--login-options <options> Server login options
--mail-auth <address> Originator address of the original email
--mail-from <address> Mail from this address
--mail-rcpt <address> Mail to this address

 

Chrome에서 curl 명령어 확인하기

클리앙에서 전문의 댓글에서 배운 내용입니다. Chrome에서도 curl 명령어를 추출할 수 있습니다. 내용 출처:  www.clien.net/service/board/lecture/15664864(승이님 댓글)

  1. 사이트 접속
  2. 개발자 메뉴 (F12)
  3. Network Tab
  4. Copy - Copy As cURL

Chrome에서 curl 명령어 확인하기&nbsp;


curl 'http://www.google.com/' \
-H 'Upgrade-Insecure-Requests: 1' \
-H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
--compressed \
--insecure

 

Slient /Show error 옵션 

 curl 명령어에서 에러가 발생가 있더라도 출력하지 않는 옵션은 -s이고,  -S 옵션은 에러를 출력하는 옵션입니다.

 

-s, --silent        Silent mode

-S, --show-error    Show error even when -s is used

 

관련 글:

[개발환경/Tips] - 네이버 동영상 다운로드 방법 (동영상과 설명 포함)
[개발환경/우분투] - Docker 개념과 명령어 사용 방법 및 예제
[개발환경/Tips] - 카카오 TV 동영상 다운로드: m4s 파일 다운로드 방법
[개발환경/우분투] - fatal error: curl/curl.h: No such file or directory
[모바일 SW 개발/REST API] - Google Gmail API 사용 방법 (2) - Sample code
[개발환경/윈도우와 WSL] - 윈도우용 MobaXterm - SSH 및 X-Server 지원
[모바일 SW 개발/REST API] - 공공 데이터 Open API 사용법: 코로나 확진자 현황 API (sample code)
[개발환경/Web Server] - 우분투 20.04에서 lighttpd Web Server 설치 (Embedded용으로 활용 가능)
[개발환경/Google Cloud Platform] - IP Address CIDR 표현법과 사용 예
[개발환경/우분투] - Docker 개념과 명령어 사용 방법 및 예제




댓글