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의 동영상 받을 때 유용합니다.
Proxy 서버 지정
Proxy 서버는 -x 옵션으로 지정 가능합니다. Win10에서는 https proxy는 미 지원합니다.
curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url.examle
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
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(승이님 댓글)
- 사이트 접속
- 개발자 메뉴 (F12)
- Network Tab
- Copy - Copy As cURL
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 개념과 명령어 사용 방법 및 예제
댓글