cURL 이란?
cURL 은 다양한 프로토콜을 이용해 데이터를 전송을 위한 커맨드 라인 클라이언트 툴이다.
맥, linux 계열 PC 에는 이미 설치가 되어 있다. windows에서는 설치가 필요하다.
맥 기준 터미널 (windows에서는 cmd)에서 curl --version 명령어를 입력해 설치가 되어있는지 확인 가능하다.
# 설치 버전을 확인 할 수 있다.
$ curl --version
curl 8.1.2 (x86_64-apple-darwin22.0) libcurl/8.1.2 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.11 nghttp2/1.51.0
Release-Date: 2023-05-30
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM NTLM_WB SPNEGO SSL threadsafe UnixSockets
설치가 되어 있다면 가장 기본적인 명령어로 GET 요청을 할 수 있다.
curl 명령어 뒤에 url을 입력하면 응답을 바로 보여준다.
아래 예시에서는 HTML 문서를 받아온다.
$ curl www.example.com
cURL 옵션 확인하기
curl 기능이 많다 보니 옵션도 다양하다.
옵션은 curl 명령어와 url 사이에 -- 또는 - 을 이용해 표기한다.
자주 사용하는 옵션 정보는 curl --help 명령어로 확인 가능하다.
모든 옵션은 curl --help all로 확인 가능하다. 필요한 옵션은 help를 보는 게 가장 좋은 것 같다.
$ curl --help
Usage: curl [options...] <url>
-d, --data <data> HTTP POST data
-f, --fail Fail fast with no output on HTTP errors
-h, --help <category> Get help for commands
-i, --include Include protocol response headers in the output
-o, --output <file> Write to file instead of stdout
-O, --remote-name Write output to a file named as the remote file
-s, --silent Silent mode
-T, --upload-file <file> Transfer local FILE to destination
-u, --user <user:password> Server user and password
-A, --user-agent <name> Send User-Agent <name> to server
-v, --verbose Make the operation more talkative
-V, --version Show version number and quit
This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".
cURL POST 요청 Json 데이터 전송
나는 주로 curl -i -X POST -H "header1" -H "header2" -d "data..." url 옵션을 자주 사용한다.
- -i는 응답 헤더를 출력해 준다.
- -X는 요청 method를 표기한다.
- -H는 요청에 서버에게 전송할 커스텀 헤더를 추가할 수 있다.
- -d는 서버에게 전송할 데이터 값을 입력한다.
옵션을 사용해서 json 데이터를 전송하는 Post 예시를 작성했다.
아래 예제에서는 json 데이터를 전송하기 때문에 -H 옵션을 사용해 헤더에 컨텐트 타입을 명시해 줬다.
curl -i \
> -X POST \
> -d "{\"key1\": \"test\", \"key2\": \"test\"}" \
> -H "Content-Type: application/json" \
> "https://httpbin.org/post"
# -i 옵션으로 응답 헤더 출력
HTTP/2 200
date: Sat, 23 Sep 2023 13:22:16 GMT
content-type: application/json
content-length: 470
server: gunicorn/19.9.0
access-control-allow-origin: *
access-control-allow-credentials: true
# 응답 body, 테스트한 요청 정보를 출력
{
"args": {},
"data": "{\"key1\": \"test\", \"key2\": \"test\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "32",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
},
"json": {
"key1": "test",
"key2": "test"
},
"origin": "http://127.0.0.1/",
"url": "https://httpbin.org/post"
}
예시 요청을 보낼 때 터미널 사용에 있어서 약간의 팁은 아래와 같다.
터미널에서 \ 입력 후 엔터키를 치면 줄 바꿈이 가능하다.
앞에 명령어와 붙여서 \ 를 사용하면 안 된다. 공백으로 옵션을 구분하기 때문에 명령어와 붙여서 \ 사용하면 옵션을 인식하지 못한다.
요청이 길어지면 줄 바꿈을 하면서 입력하면 가독성이 좋아진다.
json 데이터를 전송할 때 큰따옴표를 중복해서 써야 하는데 이 경우도 안쪽의 큰따옴표 앞에 \를 넣어주면 "로 인식하게 된다.
'프로그래밍' 카테고리의 다른 글
Mac Node.js 버전 관리 도구: n vs nvm 비교 및 사용법 (1) | 2024.11.27 |
---|---|
Swift 시간복잡도 빅오(Big-O) 주요 예제 (0) | 2024.11.22 |
[JavaScript] Date 객체와 UTC/Locale 처리 방법 (0) | 2024.11.16 |
[Next.js] NEXT_PUBLIC_ env undefined 해결하기 (0) | 2024.06.19 |
UTC , GMT, Unix Time 이란? - javascript Date객체로 확인하기 (0) | 2023.09.23 |