leexx
처음 배우는 마음으로
leexx
전체 방문자
오늘
어제
  • 분류 전체보기 (68)
    • 막개발글 (12)
    • 자바스크립트 JavaScript (17)
    • 우아한테크코스 (3)
      • 프리코스 (3)
    • 타입스크립트 TypeScript (2)
    • 리액트 React (9)
      • 리액트 React (4)
      • ReactQuery (3)
      • ReduxToolkit (1)
    • 스프링 Spring (2)
      • 전체 글 (2)
    • 코틀린 Kotlin (4)
    • 자바 Java (9)
    • 파이썬 Python (3)
      • Selenium (2)
    • SQL (1)
    • 깃허브 GitHub (1)
    • 알고리즘 Algorithm (5)
    • 일상글 (0)

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
leexx

처음 배우는 마음으로

cURL 이란 / libCurl / curl 사용 방법
막개발글

cURL 이란 / libCurl / curl 사용 방법

2024. 1. 17. 02:09

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 옵션)

옵션이라고 하는 것 같은데, 저는 옵션이라 하니 와닿지가 않았어서.. 문법이라고 적어봤습니다. 표는 여기 에서 가져왔구요, 세세한 내용들과 순서 등은 약간씩 수정하였습니다. 번호는 제가 자주 사용하는 순서입니다.

 

 

curl 설치 및 사용법 - HTTP GET/POST, REST API 연계등

서버의 정상 동작 여부를 점검할 경우 SSL 인증서 검증 제외(-k) 와 301, 302 Redirect 시 따라 가는 옵션(-L)을 추가하는 것이 안전하다.

www.lesstif.com

번호 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 를 사용했습니다.

 

JSONPlaceholder - Free Fake REST API

{JSON} Placeholder Free fake API for testing and prototyping. Powered by JSON Server + LowDB. Tested with XV. Serving ~2 billion requests each month.

jsonplaceholder.typicode.com

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
{}

 

참고

  • https://curl.se/
  • https://developer.ibm.com/articles/what-is-curl-command/
  • https://www.joinc.co.kr/w/Site/Web/documents/UsedCurl
  • https://www.lesstif.com/software-architect/curl-http-get-post-rest-api-14745703.html

'막개발글' 카테고리의 다른 글

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
    '막개발글' 카테고리의 다른 글
    • MSA 란? (등장 배경과 Micro 의 기준, SOA)
    • API Gateway 란? (\w reverse proxy, MSA, Gateway)
    • SSL 과 TLS
    • 시간 및 날짜를 다루는 방법 (1) - GMT 와 UTC, Timezone 과 Offset, 차이 및 비교
    leexx
    leexx

    티스토리툴바