cURL 이란?
curl 아니고, CURL 도 아니고, Curl 도 아닌... cURL 입니다! cURL 은 client URL 의 약자 입니다.
URL 로 개발자가 서버와 데이터를 주고받는데 사용 하는 CLI tool 입니다. 공식문서에서도 command line tool and libraryfor transferring data with URLs 라고 적혀있습니다.
cURL, which stands for client URL, is a command line tool that developers use to transfer data to and from a server. - https://developer.ibm.com/articles/what-is-curl-command/
cURL 에서는 client 가 URL 로 요청을 보낼 수 있습니다. 또한 다양한 종류의 프로토콜 을 지원합니다. 때문에 테스트에 용이합니다.
HTTP(:12), FTP(:12), LDAP(:12), TELNET(:12), HTTPS(:12), DICT(:12)와 같은 프로토콜을 지원하며, SSL(:12)을 가지는 각각의 프로토콜 역시 지원한다. 또한 HTTP기반의 upload, proxies, cookies, user+password 인증을 사용할 수도 있다. - https://www.joinc.co.kr/w/Site/Web/documents/UsedCurl
libCurl
cURL 을 찾아보다 libCurl 이라는 것을 알게 되었습니다. 처음 들어보는거라 같이 알아봤습니다.
libCurl 은 C 에서 사용할 수 있는 라이브러리로, cURL 의 핵심 기능들이 구현되어있다고 합니다. 즉 libCurl 을 사용하여 HTTP 요청을 보내거나, FTP 를 통해 파일 업로드 또는 다운로드를 구현할 수 있습니다.
HTTP, FTP 등을 위해 사용하는 라이브러리들에는 libCurl 외에도 WinINet, Poco Libraries, Boost.Asio, Qt Network, cpr (C++ Requests) 등이 있다는데요, 그 중에서도 libCurl 이 이러한 이유들로 가장 인기가 많다고 합니다.
- 광범위한 프로토콜 지원: HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP 등 다양한 프로토콜을 지원
- 다양한 플랫폼 지원: 거의 모든 운영 체제에서 사용할 수 있습니다
- 사용의 용이성: 사용하기 쉬운 API를 제공하며, 문서화도 잘 되어 있어, 개발자들이 쉽게 접근하고 사용할 수 있습니다
- 성숙도와 안정성: 오랜 기간 동안 개발 및 유지보수되어 왔으며, 널리 사용되고 테스트되어 안정성이 입증되었습니다
- 커뮤니티 및 지원: 활발한 커뮤니티와 광범위한 지원 덕분에 문제 해결이 용이합니다
cURL 설치 방법
Linux 나 MacOS 에는 기본으로 설치가 되어있습니다! 저는 맥유저니까 패스 ㅇ.<..
윈도우 유저는 요기 참고하세요~~
cURL 사용 문법 (a.k.a 옵션)
옵션이라고 하는 것 같은데, 저는 옵션이라 하니 와닿지가 않았어서.. 문법이라고 적어봤습니다. 표는 여기 에서 가져왔구요, 세세한 내용들과 순서 등은 약간씩 수정하였습니다. 번호는 제가 자주 사용하는 순서입니다.
번호 | short | long | 설명 |
---|---|---|---|
1 | -X | --request | Request 시 사용할 method 종류(GET, POST, PUT, PATCH, DELETE) 를 기술한다. |
2 | -d | --data | HTTP Post data |
3 | -o | --output FILE | curl 은 remote 에서 받아온 데이타를 기본적으로는 콘솔에 출력한다. -o 옵션 뒤에 FILE 을 적어주면 해당 FILE 로 저장한다. (download 시 유용) |
4 | -O | --remote-name | file 저장시 remote 의 file 이름으로 저장한다. -o 옵션보다 편리하다. |
5 | -v | --verbose | 동작하면서 자세한 옵션을 출력한다. |
6 | -i | --include | HTTP 응답의 헤더 정보를 포함하여 출력 |
7 | -I | --head | HTTP 응답의 헤더 정보만 출력 |
8 | -D | --dump-header | 에 HTTP header 를 기록한다. |
9 | -s | --silent | 정숙 모드. 진행 내역이나 메시지등을 출력하지 않는다. 단 진행 내역과 오류메시지를 출력하지 않는 것이지, 응답 본문 (body) 자체는 출력됨. |
10 | -k | --insecure | https 사이트를 SSL certificate 검증없이 연결한다. |
11 | -L | --location | 서버에서 HTTP 301이나 HTTP 302 응답이 왔을 경우 redirection URL 로 따라간다.--max-redirs 뒤에 숫자로 redirection 을 몇 번 따라갈지 지정할 수 있다. 기본 값은 50이다 |
12 | -J | --remote-header-name | 어떤 웹서비스는 파일 다운로드시 Content-Disposition Header 를 파싱해야 정확한 파일이름을 알 수 있을 경우가 있다. -J 옵션을 주면 헤더에 있는 파일 이름으로 저장한다. |
단순히 받은 파일의 내용만을 console 에 출력하기 (GET)
curl http://www.gnu.org/software/bash/manual/html_node/index.html
curl -X GET "http://www.gnu.org/software/bash/manual/html_node/index.html"
# -X GET 으로 이 Request 는 GET 이라는 것을 명시하였음
받은 파일을 저장하기
curl http://www.gnu.org/software/bash/manual/html_node/index.html -o myhtml.html
# -o 뒤에 내가 원하는 이름을 적는다
curl http://www.gnu.org/software/bash/manual/html_node/index.html -O
# url 에서 파일의 이름을 파싱하여, 파일의 이름으로 알아서 저장한다
# 확인해보면 index.html 이라는 이름의 파일이 생성되어있음
모든 내용을 출력하기
curl이 수행하는 모든 작업에 대한 자세한 정보가 출력됩니다. 주로 통신 과정에서 어떤 일이 일어나는지 확인하고자 할 때 사용합니다.
- 알 수 있는 정보들
- 요청을 보내기 위해 사용하는 HTTP 메소드, URL, 헤더 등의 요청 정보.
- 서버로부터 받은 응답의 상태 코드, 헤더 등의 응답 정보.
- 네트워크 연결, SSL/TLS 핸드셰이크, 인증 과정에서의 세부 정보.
- 오류 메시지 또는 진단 정보.
curl https://tech.kakao.com/storage/2024/01/ororforge2_1.png -v
HTTP 헤더 출력하기
curl http://www.gnu.org/software/bash/manual/html_node/index.html -i
# 헤더를 포함해서 출력하기
curl http://www.gnu.org/software/bash/manual/html_node/index.html -I
# 헤더만 출력하기
HTTP 헤더를 다른 파일에 기록하기
curl http://www.gnu.org/software/bash/manual/html_node/index.html -D myheader.txt
# body 가 다 출력이 됨
curl http://www.gnu.org/software/bash/manual/html_node/index.html -D myheader.txt -I
# -I 를 안붙여도 되지만, -I 를 붙이지 않으면 파일의 모든 내용이 다 출력이 된다.
# 따라서 헤더만 출력하는 -I 를 붙이면, myheader.txt 에 들어갈 내용을 미리 확인할 수 있다.
확인해보면 이런 파일이 생겨져있다.
➜ myCurl ls -al
total 792
drwxr-xr-x@ 6 user staff 192 1 17 01:22 .
drwxr-xr-x@ 20 user staff 640 1 17 00:49 ..
-rw-r--r--@ 1 user staff 21488 1 17 01:12 index.html
-rw-r--r-- 1 user staff 432 1 17 01:21 myheader.txt # here!!!
CRUD 요청해보기 (POST/GET/PUT/DELETE)
https://jsonplaceholder.typicode.com/ 요기 API 를 사용했습니다.
POST 요청 예시
Header 에 Content-Type 에 application/json
를 set 하고, {"key1":"value1", "key2":"value2"}
를 보내려 하였습니다.
### request
curl -X POST "https://jsonplaceholder.typicode.com/posts" \
-H "Content-Type: application/json" \
-d '{"key1":"value1", "key2":"value2"}'
### response
{
"key1": "value1",
"key2": "value2",
"id": 101
}
GET 요청 예시
### request
curl -X GET "https://jsonplaceholder.typicode.com/todos/1"
### response
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
PUT 요청 예시
### request
curl -X PUT "https://jsonplaceholder.typicode.com/posts/1" \
-H "Content-Type: application/json" \
-d '{"key1":"value1", "key2":"value2"}'
### response
{
"key1": "value1",
"key2": "value2",
"id": 1
}
DELETE 요청 예시
### request
curl -X DELETE "https://jsonplaceholder.typicode.com/posts/1"
### response
{}
참고
'막개발글' 카테고리의 다른 글
MSA 란? (등장 배경과 Micro 의 기준, SOA) (0) | 2024.01.19 |
---|---|
API Gateway 란? (\w reverse proxy, MSA, Gateway) (0) | 2024.01.18 |
SSL 과 TLS (2) | 2024.01.11 |
시간 및 날짜를 다루는 방법 (1) - GMT 와 UTC, Timezone 과 Offset, 차이 및 비교 (6) | 2024.01.09 |
CSR, SSR, Rendering (0) | 2023.06.17 |