๋ชฉ์ฐจ
๊ฐ์
curl ์ command line ์ฉ data transfer tool ์ด๋ค. download/upload ๋ชจ๋ ๊ฐ๋ฅํ๋ฉฐ HTTP/HTTPS/FTP/LDAP/SCP/TELNET/SMTP/POP3 ๋ฑ ์ฃผ์ํ ํ๋กํ ์ฝ์ ์ง์ํ๋ฉฐ Linux/Unix ๊ณ์ด ๋ฐ Windows ๋ฑ ์ฃผ์ํ OS ์์ ๊ตฌ๋๋๋ฏ๋ก
์ฌ๋ฌ ํ๋ซํผ๊ณผ OS์์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ๋ libcurl ์ด๋ผ๋ C ๊ธฐ๋ฐ์ library ๊ฐ ์ ๊ณต๋๋ฏ๋ก C/C++ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ์์ protocol ๊ณผ ์ฐ๊ณ๊ฐ ํ์ํ๋ค๋ฉด libcurl ์ ์ฌ์ฉํ์ฌ ์์ฝ๊ฒ ์ฐ๊ณํ ์ ์๋ค.
libcurl์ PHP, ruby, PERL ๋ฐ ์ฌ๋ฌ ์ธ์ด์ ๋ฐ์ธ๋ฉ๋์ด ์์ผ๋ฏ๋ก ์ฌ์ฉํ๋ ์ธ์ด๋ ๊ฐ๋ฐํ๊ฒฝ์ ๋ง๊ฒ libcurl ์ ์ฌ์ฉํ ์ ์๋ค.
์ค์น
Linux๋ Mac OS X ์๋ ๊ธฐ๋ณธ ํ์ฌ๋์ด ์๋ค. Windows๋ build ๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ค์นํด๋ ๋๊ณ compiler ๊ฐ ์๋ค๋ฉด ์์ค๋ฅผ ๋ฐ์์ ์ง์ ๋น๋ํด๋ ๋๋ค.(curl windows ์์ ๋น๋ํ๊ธฐ ์ฐธ์กฐ)
Windows ๋ฒ์ ์ cygwin๋ MinGW ๋ก ๋น๋ํ๊ฑฐ ๋ณด๋ค๋ VIsual Studio ๋ก ๋น๋ํ ๋ฒ์ ์ ๋ค์ด๋ฐ๋๊ฒ ์ข๋ค. (Win32-Generic, Win64 - Generic ํญ๋ชฉ์์ ๋ฐ์ผ๋ฉด ๋๋ฉฐ ์ถ์ฒํ๋ ๋งํฌ๋ https://winampplugins.co.uk/curl/ ์ด๋ค.)
CentOS/RHEL ๊ณ์ด์์ ์ต์ ๋ฒ์ ์ค์น๋ RHEL/CentOS 6 ์์ curl ์ต์ ๋ฒ์ ์ค์น ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์.
์ฃผ์ ์ต์
์ต์ ์ค๋ช
-k | https ์ฌ์ดํธ๋ฅผ SSL certificate ๊ฒ์ฆ์์ด ์ฐ๊ฒฐํฉ๋๋ค. |
-L | ์๋ฒ์์ HTTP 301 ์ด๋ HTTP 302 ์๋ต์ด ์์ ๊ฒฝ์ฐ redirection URL ๋ก ๋ฐ๋ผ๊ฐ๋๋ค. --max-redirs ๋ค์ ์ซ์๋ก redirection ์ ๋ช ๋ฒ ๋ฐ๋ผ๊ฐ์ง ์ง์ ํ ์ ์์ผ๋ฉฐ๊ธฐ๋ณธ ๊ฐ์ 50์ ๋๋ค |
-v | ๋์ํ๋ฉด์ ์์ธํ ์ต์ ์ ์ถ๋ ฅํฉ๋๋ค. |
-o | curl ์ remote ์์ ๋ฐ์์จ ๋ฐ์ดํ๋ฅผ -o ์ต์ ๋ค์ ์ ์ด์ค FILE ๋ช ์ผ๋ก ์ ์ฅํฉ๋๋ค. |
-d | HTTP Post ๋ฐฉ์์ผ๋ก ๋ฐ์ดํ๋ฅผ ์ ์กํฉ๋๋ค. |
-u | HTTP Basic Auth์ ์ฌ์ฉํ Id ์ ์ํธ๋ฅผ ์ง์ ํฉ๋๋ค. |
-H | ์ ์ก์ ์ถ๊ฐํ HTTP Header ๋ฅผ ๊ธฐ์ ํฉ๋๋ค. |
์๋ฒ์์ ๋ค์ด๋ก๋
๋๋ฌธ์ -O ์ต์ ์ ์ฃผ๋ฉด URL์ ๋งจ ๋ค์ ์๋ resource ๋ช ์ธ bc-1.07.1.tar.gz ๋ก ํ์ผ์ ์ ์ฅํฉ๋๋ค.
curl -O http://ftp.gnu.org/gnu/bc/bc-1.07.1.tar.gz
์๋ฌธ์ -o ์ต์ ๋ค์ ์ง์ ํ filename ์ผ๋ก ์ ์ฅํ๋ฉฐ ์๋ ์์ ๋ bc.tgz ๋ก ํ์ผ์ ์ ์ฅํฉ๋๋ค.
curl -o bc.tgz http://ftp.gnu.org/gnu/bc/bc-1.07.1.tar.gz
HTTP Basic auth
-u ๋ค์ ๋ก๊ทธ์ธํ id(userid)์ ์ํธ(password)๋ฅผ ์ง์ ํ๋ฉฐ ๊ตฌ๋ถ์ ์ํด : ๋ฅผ ์ฃผ์ด์ผ ํฉ๋๋ค.
curl -u userid:password http://www.example.com/user.html
HTTP Bearer token ์ธ์ฆ
OAuth ๋ JWT ๋ฑ์ ์ฌ์ฉํ๋ Bearer token ์ ์ฌ์ฉํ๋ ค๋ฉด -H ์ต์ ๋ค์ 'Authorization: Bearer {TOKEN}' ๋ฅผ ์ถ๊ฐํ๋ฉฐ {TOKEN} ์ ์ค์ ํ ํฐ์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ฉฐ ์๋๋ 12345 ๋ผ๋ token ์ ์๋ฒ์ ์ ์กํ๋ ์์ ์ ๋๋ค.
curl -L -X POST -H 'Accept: application/json' -H 'Authorization: Bearer 12345' 'https://www..example.com/api/myresource'
POST ๋ก data ์ ์ก
๋ฐ์ดํ ํ์ผ์ ๋ณด๋ด๋ -d ์ต์ ๋ค์ ์ ์กํ json ๋ฐ์ดํ๋ฅผ ์ ์ด์ฃผ๊ณ ํค๋๋ฅผ ์ถ๊ฐํ๋ -H ์ต์ ์ผ๋ก "Accept: application/json" ์ "Content-Type: application/json" ๋ฅผ ๊ธฐ์ ํฉ๋๋ค.
curl -u userid:password -L -v -d '{"name": "superman", "age" : 30}' -H "Accept: application/json" -H "Content-Type: application/json" 'https://postman-echo.com/post'
ํฐ ๋ฐ์ดํ์ ๊ฒฝ์ฐ ์ปค๋งจ๋์ ๋ด์ฉ์ ์ ์ด์ค ์ ์์ผ๋ฏ๋ก ํ์ผ๋ก ์ ์ฅํ๊ณ -d ์ต์ ๋ค์ ํ์ผ์ ์ง์ ํ๋ ํค์๋์ธ @FILENAME ์ ์ฌ์ฉํฉ๋๋ค. ์๋๋ my-json-file ๋ด์ฉ์ json ํ์์ผ๋ก ๋ณด๋ด๋ ์์ ์ ๋๋ค.
curl -u userid:password -L -v -d @my-json-file -H "Accept: application/json" -H "Content-Type: application/json" 'https://postman-echo.com/post'
jq ์ ์ฐ๋
๋ช ๋ นํ JSON ์ฒ๋ฆฌ๊ธฐ์ธ jq ๋ฅผ ํ์ฉํด์ ์๋ฒ์ JSON ์๋ต์ ํฌ๋งทํ
curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq .
์๋ฒ์ json ๋ฐฐ์ด์ค 3๋ฒ์งธ ๋ฐฐ์ด ์ถ์ถํฉ๋๋ค.
curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.[2]'
salesforce REST API
API ๋ชฉ๋ก ์ป๊ธฐ
curl http://na1.salesforce.com/services/data/
[
{ "label": "Winter '11", "url": "/services/data/v20.0", "version": "20.0" },
{ "label": "Spring '11", "url": "/services/data/v21.0", "version": "21.0" },
{ "label": "Summer '11", "url": "/services/data/v22.0", "version": "22.0" },
{ "label": "Winter '12", "url": "/services/data/v23.0", "version": "23.0" },
{ "label": "Spring '12", "url": "/services/data/v24.0", "version": "24.0" },
{ "label": "Summer '12", "url": "/services/data/v25.0", "version": "25.0" },
{ "label": "Winter '13", "url": "/services/data/v26.0", "version": "26.0" },
{ "label": "Spring '13", "url": "/services/data/v27.0", "version": "27.0" },
{ "label": "Summer '13", "url": "/services/data/v28.0", "version": "28.0" },
{ "label": "Winter '14", "url": "/services/data/v29.0", "version": "29.0" },
{ "label": "Spring '14", "url": "/services/data/v30.0", "version": "30.0" }
]
์ถ์ฒ : Software Architect (https://www.lesstif.com/)
๋๊ธ