댓글 검색 목록

[javascript] Curl에 대해 JavaScript 개발자가 알아야 할 사항

페이지 정보

작성자 운영자 작성일 20-06-20 10:17 조회 750 댓글 0

Curl은 HTTP 요청에 자주 사용되는 인기 있는 명령 줄 도구입니다. Curl은 다양한 다른 프로토콜을 지원하지만 Node.js 개발자는 이 프로토콜을 사용하여 RESTful API에 대한 HTTP 요청을 할 것입니다.


http://thecodebarbarian.com/what-javascript-developers-should-know-about-curl.html 


안타깝게도 curl 문서에는 지원되는 명령 줄 플래그가 383으로 나열되어있어 원하는 것을 찾기가 어렵습니다. 이 기사에서는 우수한 httpbin.org 서비스를 예로 들어 curl에서 가장 자주 사용하는 패턴을 나열합니다.


HTTP GET 요청하기 


먼저 curl --version을 실행하여 curl이 설치되어 있는지 다시 확인하십시오.


$ curl --version
curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.1 zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
Release-Date: 2018-01-24
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL 

HTTP GET 요청을 하려면 curl <url> 만 실행하면 됩니다. 예를 들어 https://httpbin.org/get?answer=42에 HTTP GET 요청을 하려면 curl https://httpbin.org/get?answer=42를 실행할 수 있습니다.


$ curl https://httpbin.org/get?answer=42
{
  "args": {
    "answer": "42"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.58.0", 
    "X-Amzn-Trace-Id": "Root=1-5ee8d737-b39c6a466892725bbb52b916"
  }, 
  "origin": "69.84.111.39", 
  "url": "https://httpbin.org/get?answer=42"
}
$

HTTP 요청이 성공하면 curl은 HTTP 응답 본문을 인쇄합니다. curl 을 응답 헤더를 포함한 전체 응답으로 인쇄하려면 -i 플래그를 사용하십시오.


$ curl -i https://httpbin.org/get?answer=42
HTTP/2 200 
date: Tue, 16 Jun 2020 14:30:57 GMT
content-type: application/json
content-length: 801
server: istio-envoy
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 2

{
  "args": {
    "answer": "42"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Content-Length": "0", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.58.0", 
    "X-Amzn-Trace-Id": "Root=1-5ee8d7a1-cb3954c09299eb9e0dff70a6", 
    "X-B3-Parentspanid": "dffc55451e64b5fc", 
    "X-B3-Sampled": "0", 
    "X-B3-Spanid": "8e233a863fb18b6c", 
    "X-B3-Traceid": "45bd12a9067fb5c0dffc55451e64b5fc", 
    "X-Envoy-External-Address": "10.100.91.201", 
    "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/httpbin-istio/sa/httpbin;Hash=c1ff14671b3e24ee794f9a486570abf8ccc9d622846611d3f91a322db4d480cd;Subject=\"\";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
  }, 
  "origin": "69.84.111.39,10.100.91.201", 
  "url": "http://httpbin.org/get?answer=42"
}

위의 출력은 원시 HTTP 응답입니다. 응답 헤더는 날짜 :에서 x-envoy-upstream-service-time :까지의 행입니다.


파일 다운로드 


Wget은 명령 줄을 통해 파일을 다운로드하는 일반적인 도구입니다. 대부분의 Linux 배포판에는 wget이 내장되어 있지만 눈에 띄게 OSX에는 wget이 제공되지 않습니다.


실제로 wget url은 curl -OL url과 같습니다. -O 옵션은 --remote-name 옵션이며 curl이 응답 본문을 로컬 파일에 저장하도록 지시합니다. -L 옵션은 curl에게 리디렉션을 따르도록 지시합니다.


예를 들어 아래는 Unsplash의 이미지이며 URL은 https://images.unsplash.com/photo-1506812574058-fc75fa93fead입니다.


photo-1506812574058-fc75fa93fead 


curl을 사용하여 이 이미지를 다운로드하려면 다음을 실행하십시오.


$ curl -OL https://images.unsplash.com/photo-1506812574058-fc75fa93fead
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12.1M  100 12.1M    0     0  3927k      0  0:00:03  0:00:03 --:--:-- 3927k
$

-O 옵션은 curl에서 마지막 / 이후의 모든 것을 파일 이름으로 사용하도록 지시합니다. 따라서 위의 예에서 이미지는 파일 이름이 photo-1506812574058-fc75fa93fead 인 현재 디렉토리에 저장됩니다. 파일 이름을 지정하려면 -o 옵션 (소문자 'o')을 사용하십시오.


$ curl -o miami-beach.jpg https://images.unsplash.com/photo-1506812574058-fc75fa93fead
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12.1M  100 12.1M    0     0  6083k      0  0:00:02  0:00:02 --:--:-- 6083k
$ ls -l miami-beach-jpg
-rw-rw-r-- 1 val val 12788445 Jun 16 11:03 miami-beach.jpg
$

승인으로 요청하기 


인증 헤더는 RESTful API와 대화 할 때 일반적으로 인증 자격 증명을 넣어야 하는 곳입니다. 권한 부여 헤더를 수동으로 설정하려면 사용자 정의 요청 헤더를 설정하는 -H 플래그를 사용해야 합니다. 예를 들어, API 키가 my-secret-token 인 경우 아래와 같이 curl HTTP 요청에 첨부 할 수 있습니다.


$ curl -H "Authorization: my-secret-token" https://httpbin.org/get
{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Authorization": "my-secret-token", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.58.0", 
    "X-Amzn-Trace-Id": "Root=1-5ee8e1a5-a3aa30e0765a7980b04ca4a0"
  }, 
  "origin": "69.84.111.39", 
  "url": "https://httpbin.org/get"
}
$

httpbin.org/get은 headers 속성 아래의 응답 본문에서 HTTP 요청 헤더를 다시 보냅니다.


Curl은 또한 -u 플래그를 사용하여 기본 인증을 지원합니다. 예를 들어, 아래는 사용자 이름 사용자 및 비밀번호 전달로 요청을 보내는 방법입니다.


$ curl -i -u "user:pass" https://httpbin.org/basic-auth/user/pass
HTTP/2 200 
date: Tue, 16 Jun 2020 15:18:45 GMT
content-type: application/json
content-length: 47
server: istio-envoy
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 1

{
  "authenticated": true, 
  "user": "user"
}
$

잘못된 사용자 이름과 비밀번호를 보내면 어떻게 됩니까?


$ curl -i -u "user:wrongpass" https://httpbin.org/basic-auth/user/pass
HTTP/2 401 
date: Tue, 16 Jun 2020 15:18:51 GMT
content-length: 0
server: istio-envoy
www-authenticate: Basic realm="Fake Realm"
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 12

$

JSON으로 POST 요청하기 


-X 플래그는 curl에 PUT, POST 등 사용할 HTTP 메소드를 알려줍니다. 기본적으로 curl은 GET을 사용하므로 curl -X GET을 수행 할 필요가 없습니다.


-X 플래그는 종종 -d 플래그와 함께 사용되어 요청 본문을 설정할 수 있습니다. 다음은 일부 JSON으로 POST 요청을 보내는 방법입니다.


$ curl -X POST -d '{"answer":42}' https://httpbin.org/post
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "{\"answer\":42}": ""
  }, 
  "headers": {
    "Accept": "*/*", 
    "Content-Length": "13", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.58.0", 
    "X-Amzn-Trace-Id": "Root=1-5ee8e3fd-8437029087be44707bd15320", 
    "X-B3-Parentspanid": "2a739cfc42d28236", 
    "X-B3-Sampled": "0", 
    "X-B3-Spanid": "8bdf030613bb9c8d", 
    "X-B3-Traceid": "75d84f317abad5232a739cfc42d28236", 
    "X-Envoy-External-Address": "10.100.91.201", 
    "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/httpbin-istio/sa/httpbin;Hash=ea8c3d70befa0d73aa0f07fdb74ec4700d42a72889a04630741193548f1a7ae1;Subject=\"\";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
  }, 
  "json": null, 
  "origin": "69.84.111.39,10.100.91.201", 
  "url": "http://httpbin.org/post"
}
$

curl은 기본적으로 요청의 'Content-Type'헤더를 application / x-www-form-urlencoded로 설정합니다. JSON에는 올바르지 않으므로 JSON 요청의 경우 -H 플래그를 사용하여 'Content-Type'헤더도 설정해야 합니다.


$ curl -X POST -d '{"answer":42}' -H "Content-Type: application/json" https://httpbin.org/post
{
  "args": {}, 
  "data": "{\"answer\":42}", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Content-Length": "13", 
    "Content-Type": "application/json", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.58.0", 
    "X-Amzn-Trace-Id": "Root=1-5ee8e45e-ad875af4f83efd4379b86c34", 
    "X-B3-Parentspanid": "5f4f33d1c5ea13aa", 
    "X-B3-Sampled": "0", 
    "X-B3-Spanid": "a062c9bf2ebfd4bd", 
    "X-B3-Traceid": "44aa8d62412ae34d5f4f33d1c5ea13aa", 
    "X-Envoy-External-Address": "10.100.86.47", 
    "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/httpbin-istio/sa/httpbin;Hash=2f0b3331fe4d512975b4b82583a55dd5d1196023d0dfce9e0abed246991c5b67;Subject=\"\";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
  }, 
  "json": {
    "answer": 42
  }, 
  "origin": "69.84.111.39,10.100.86.47", 
  "url": "http://httpbin.org/post"
}

JSON 파일을 사용하여 PUT 요청 만들기 


-d 플래그 자체는 작은 요청에 편리하지만 거대한 JSON 페이로드를 처리하기가 번거로울 수 있습니다. 고맙게도 -d 플래그는 로컬 파일에서 데이터를 가져 오는 것을 지원합니다.


예를 들어, 아래 내용이 있는 data.json 파일이 있다고 가정하십시오.


{"answer":42}

해당 파일을 요청 본문으로 하여 HTTP PUT 요청을 작성하려면 -d 플래그를 '@ data.json'으로 설정할 수 있습니다. @ 접두사는 curl에게 'data.json'파일에서 요청 본문을 로드 하도록 지시합니다.


$ curl -X PUT -d '@data.json' -H "Content-Type: application/json" https://httpbin.org/put
{
  "args": {}, 
  "data": "{\"answer\":42}", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Content-Length": "13", 
    "Content-Type": "application/json", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.58.0", 
    "X-Amzn-Trace-Id": "Root=1-5ee8e745-37c4ef06326b7b4354a16b94", 
    "X-B3-Parentspanid": "a4f8f91f4f1b051e", 
    "X-B3-Sampled": "0", 
    "X-B3-Spanid": "a018b1a3fcebdc68", 
    "X-B3-Traceid": "7b48b01dc3f632eea4f8f91f4f1b051e", 
    "X-Envoy-External-Address": "10.100.91.201", 
    "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/httpbin-istio/sa/httpbin;Hash=6035260d9d551af6c1907270653214e8d3195abbdd19078c1c84fd9a4106f260;Subject=\"\";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
  }, 
  "json": {
    "answer": 42
  }, 
  "origin": "69.84.111.39,10.100.91.201", 
  "url": "http://httpbin.org/put"
}
$ 


계속 


요약하면, 가장 유용한 컬 옵션이 있습니다.

  • -X : HTTP 메소드 설정 (예 : curl -X POST url)
  • -d : PUT 및 POST 요청에 대한 요청 본문을 문자열로 설정
  • -H : 요청 헤더를 설정합니다 (예 : curl -H "권한 : 내 비밀 토큰"url).
  • -u : 기본 인증을위한 인증 자격 증명
  • -O : 응답 본문을 파일에 저장
  • -i : 응답 헤더를 포함한 원시 응답 표시

Curl은 사용자가 서명 한 API이든 로컬에서 개발 중인 것인지에 관계없이 명령 줄에서 API를 수정하는 데 유용한 도구입니다. 빠른 테스트를 위해 구문에 익숙하다면 Node.js에서 Axios 요청을 작성하거나 Postman에서 요청을 설정하는 것보다 Curl이 더 쉽습니다.




댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.