LINUX
2018.10.01 / 21:45

curl

Chitta
Ãßõ ¼ö 139

curl Àº Ä¿¸Çµå ¶óÀο¡¼­ µ¿ÀÛÇÏ´Â µ¥ÀÌŸ ¼Û¼ö½Å Åø·Î HTTP, HTTPS, FTP, LDAP, SCP, TELNET, SMTP, POP3 µî ÁÖ¿äÇÑ ÇÁ·ÎÅäÄÝÀ» Áö¿øÇÑ´Ù.

¸®´ª½º¿Í Mac OS X, À¯´Ð½º¿Í À©µµµî ÁÖ¿ä OS ¿¡¼­ ±¸µ¿µÇ¹Ç·Î Ç÷§Æû°ú OS¿¡ ±¸¾Ö ¹ÞÁö ¾Ê°í À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

curl ÀÇ ÇÏÀ§ ¸ðµâ·Î´Â libcurl À̶ó´Â C ¾ð¾î ±â¹Ý ¶óÀ̺귯¸®°¡ Àִµ¥ C, C++ ÇÁ·Î±×·¥ °³¹ß½Ã HTTP, HTTPS, FTP, LDAP µîÀÇ protocol °ú ¿¬°è°¡ ÇÊ¿äÇÏ´Ù¸é libcurl À» »ç¿ëÇÏ¿© ¼Õ½±°Ô ¿¬°èÇÒ ¼ö ÀÖ´Ù. 

 

»ç¿ë¹ý

curl [options...] <url> Çü½ÄÀ¸·Î »ç¿ëÇÏ¸é µÈ´Ù.

option 󸮴 GNU getopt ¸¦ »ç¿ëÇϹǷΠÇÏÀÌÇ Çϳª¸¦ ºÙÀÌ´Â short Çü½ÄÀÇ ¿É¼Ç°ú ÇÏÀÌÇ µÎ°³·Î ½ÃÀ۵Ǵ long Çü½ÄÀÇ options ÀÌ ÀÖ´Ù. 

 

ÁÖ¿ä options

curlÀº ´Ù¾çÇÑ ÇÁ·ÎÅäÄÝ°ú ±â´ÉÀ» Áö¿øÇϹǷΠ¸¹Àº ¸í·É¾î¿Í ¿É¼ÇÀ» °®°í ÀÖ´Ù. ¿©±â¿¡¼­ Á¦ÀÏ ¸¹ÀÌ »ç¿ëµÇ´Â http/https °ü·Ã ¿É¼ÇÀ» »ìÆì º¸ÀÚ.

short
long
¼³¸í
ºñ°í
-k--insecurehttps »çÀÌÆ®¸¦ SSL certificate °ËÁõ¾øÀÌ ¿¬°áÇÑ´Ù.wget ÀÇ --no-check-certificate °ú µ¿ÀÏÇÑ ¿ªÇÒ ¼öÇà
-l--headHTTP header ¸¸ º¸¿©ÁÖ°í content ´Â Ç¥½ÃÇÏÁö ¾Ê´Â´Ù 
-D--dump-header <file><file> ¿¡ HTTP header ¸¦ ±â·ÏÇÑ´Ù. 
-L--location¼­¹ö¿¡¼­ HTTP 302 redirection ÀÀ´äÀÌ ¿ÔÀ» °æ¿ì redirection URL ·Î µû¶ó°£´Ù.

curl -v daum.net À» ½ÇÇàÇÏ¸é °á°ú°ªÀ¸·Î ´ÙÀ½°ú °°ÀÌ HTTP 302 °¡ ¸®ÅϵȴÙ.

< HTTP/1.1 302 Object Moved
< Location: http://www.daum.net/

-L ¿É¼ÇÀ» Ãß°¡Çϸé www.daum.net À¸·Î ÀçÁ¢¼ÓÇÏ¿© °á°ú¸¦ ¹Þ¾Æ¿À°Ô µÈ´Ù.

-d--dataHTTP Post dataFORM À» POST ÇÏ´Â HTTP³ª JSON À¸·Î µ¥ÀÌŸ¸¦ ÁÖ°í¹Þ´Â REST ±â¹ÝÀÇ À¥¼­ºñ½º µð¹ö±ë½Ã À¯¿ëÇÑ ¿É¼ÇÀÌ´Ù
-v--verbose µ¿ÀÛÇϸ鼭 ÀÚ¼¼ÇÑ ¿É¼ÇÀ» Ãâ·ÂÇÑ´Ù. 
-J--remote-header-name¾î¶² À¥¼­ºñ½º´Â ÆÄÀÏ ´Ù¿î·Îµå½Ã Content-Disposition Header ¸¦ ÆĽÌÇØ¾ß Á¤È®ÇÑ ÆÄÀÏÀ̸§À» ¾Ë ¼ö ÀÖÀ» °æ¿ì°¡ ÀÖ´Ù. -J ¿É¼ÇÀ» ÁÖ¸é Çì´õ¿¡ ÀÖ´Â ÆÄÀÏ À̸§À¸·Î ÀúÀåÇÑ´Ù.curl 7.20 ÀÌ»óºÎÅÍ Ãß°¡µÈ ¿É¼Ç
-o--output FILEcurl Àº remote ¿¡¼­ ¹Þ¾Æ¿Â µ¥ÀÌŸ¸¦ ±âº»ÀûÀ¸·Î´Â Äֿܼ¡ Ãâ·ÂÇÑ´Ù. -o ¿É¼Ç µÚ¿¡ FILE À» Àû¾îÁÖ¸é ÇØ´ç FILE ·Î ÀúÀåÇÑ´Ù. (download ½Ã À¯¿ë) 
-O--remote-namefile ÀúÀå½Ã remote ÀÇ file À̸§À¸·Î ÀúÀåÇÑ´Ù. -o ¿É¼Çº¸´Ù Æí¸®ÇÏ´Ù. 
-s--silentÁ¤¼÷ ¸ðµå. ÁøÇà ³»¿ªÀ̳ª ¸Þ½ÃÁöµîÀ» Ãâ·ÂÇÏÁö ¾Ê´Â´Ù. -o ¿É¼ÇÀ¸·Î remote data µµ /dev/null ·Î º¸³»¸é °á°ú¹°µµ Ãâ·ÂµÇÁö ¾Ê´Â´ÙHTTP response code ¸¸ °¡Á®¿À°Å³ª ÇÒ °æ¿ì À¯¸®
curl ÁÖ¿ä ¿É¼Ç

ÀÌÁ¦ curlÀ» »ç¿ëÇÏ¿© HTTP/HTTPS ¿äûÀ» º¸³»°í ¹Þ´Â ¿¹Á¦¸¦ ¾Ë¾Æ º¸ÀÚ.

 

HTTP/HTTPS ¿¬°á

curl ¸í·É°ú ÇÔ²² URL À» ¸í½ÃÇϸé URL ¿¡ ÀÖ´Â ÄÁÅÙÃ÷¸¦ ´Ù¿î·Îµå ¹Þ¾Æ¼­ ÄַܼΠÃâ·ÂÇÑ´Ù. ´ÙÀ½ ¸í·É¾î´Â index.html À» Àü¼ÛÈÄ »ç¿ëÀÚÀÇ Äֿܼ¡ Ãâ·ÂÇÏ°Ô µÈ´Ù.

curl http://www.gnu.org/software/bash/manual/html_node/index.html

 

¼­¹ö ÄÁÅÙÃ÷ ´Ù¿î·Îµå

ÄַܼΠ´Ù¿î·Îµå ¹Þ´Â °Ç ±×¸® À¯¿ëÇÏÁö ¾Ê´Â °æ¿ì°¡ ¸¹´Ù. ƯÈ÷ ¹ÙÀ̳ʸ® ÆÄÀÏÀ» Ãâ·ÂÇϸé Å͹̳ÎÀÌ ±úÁ®¼­ ÀÌÈÄ ÀÔ·Â/Ãâ·ÂµÇ´Â ¹®ÀÚ°¡ ±úÁ® º¸¿©¼­ Á¤»óÀûÀÎ ÀÛ¾÷ÀÌ ºÒ°¡´ÉÇÏ¿© reset ¸í·É¾î·Î Å͹̳ÎÀ» ÃʱâÈ­ÇØ¾ß ÇÒ ¼ö ÀÖ´Ù.

curl ½ÇÇà½Ã -o, --output ¿É¼ÇÀ¸·Î Ãâ·Â ÆÄÀÏÀ» ÁöÁ¤Çϸé ÄַܼΠÃâ·ÂÇÏÁö ¾Ê°í ÆÄÀÏ·Î ÀúÀåÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº index.html À» bash_manual.html ·Î ÀúÀåÇÑ´Ù.

curl -o bash_manual.html http://www.gnu.org/software/bash/manual/html_node/index.html

¸Å¹ø Ãâ·Â ÆÄÀÏÀ» ÁöÁ¤ÇÏ´Â °ÍÀº ¹ø°Å·Î¿î ÀÏÀÌ´Ù. -O, --remote-name ¿É¼ÇÀ» »ç¿ëÇϸé URL ¿¡¼­ ÆÄÀϸíÀ» ÃßÃâÇÏ¿© ÀúÀåÇϹǷΠÃâ·Â ÆÄÀÏÀ» »ý·«ÇÒ ¼ö À־ -o º¸´Ù Æí¸®ÇÑ °æ¿ì°¡ ¸¹´Ù.

´ÙÀ½Àº URL ¿¡¼­ ÄÁÅÙÃ÷ À̸§ÀÎ index.html À» ÃßÃâÇÏ¿© ÆÄÀÏ·Î ÀúÀåÇÑ´Ù.

curl -O http://www.gnu.org/software/bash/manual/html_node/index.html

ÄÁÅÙÃ÷ À̵¿½Ã µû¶ó°¡±â

À¥ ¼­¹ö¿¡¼­ HTTP ÀÀ´ä°ªÀ¸·Î ÇØ´ç ÄÁÅÙÃ÷°¡ ´Ù¸¥ °÷¿¡ ÀÖ´Ù´Â 301 Moved Permanently ³ª 302 Found ¸¦ º¸³ÂÀ» °æ¿ì curl ÀÇ ±âº» µ¿ÀÛÀº ´õ ÀÌ»ó ÁøÇàÇÏÁö ¾Ê´Â °ÍÀÌ´Ù.

curl http://www.google.com

 

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved

 

-L, –location ¿É¼ÇÀ» ÁÖ¸é º¯°æµÈ URL ·Î µû¶ó °¡¼­ °á°ú¸¦ °¡Á®¿Â´Ù. º¯°æµÈ URL ¿¡ ¿¬°áÇß´õ´Ï ¶Ç ´Ù¸¥ °÷¿¡ ÄÁÅÙÃ÷°¡ ÀÖ´Ù´Â ÀÀ´äÀ» º¸³¾ ¼ö ÀÖ´Ù. curl Àº ÀÌ·¸°Ô ´Ù¸¥ À§Ä¡¸¦ º¸³¾ °æ¿ì ¸î ¹øÀ» µû¶ó°¥ Áö ¿©ºÎ¸¦  --max-redirs µÚ¿¡ ¼ýÀÚ·Î ÁöÁ¤ÇÒ ¼ö ÀÖ°í ±âº» ¼³Á¤Àº 50ÀÌ´Ù.

curl -L http://www.google.com

 

HTTP ÀÎÁõ

ƯÁ¤ »çÀÌÆ®³ª ÄÁÅÙÃ÷´Â ÀÎÁõÀ» °ÅÃÄ¾ß ÇÏ´Â °æ¿ì°¡ ÀÖ´Ù.  -u, –user ¿É¼Ç µÚ¿¡ ¾ÆÀ̵ð:¾ÏÈ£ ¸¦ ÁöÁ¤ÇÏ¿© ÀÎÁõÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ID ·Î myuserid ¸¦ ¾ÏÈ£·Î mypwd ¸¦ ¼³Á¤ÇÏ¿© À¥ »çÀÌÆ®¿¡ ÀÎÁõÀ» ¿äûÇÏ´Â ¿¹Á¦ÀÌ´Ù.

curl -u myuserid:mypwd http://www.example.com

 

HTTP Çì´õ ¼³Á¤

¼­¹ö¿¡ ¿¬°á½Ã ƯÁ¤ HTTP Çì´õ¸¦ ¼³Á¤ÇØ¾ß ÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ¿¹·Î ¼­¹ö°¡ REST API ¸¦ Á¦°øÇÒ °æ¿ì µ¥ÀÌŸ Çü½ÄÀÌ XML ÀÎÁö JSON ÀÎÁö¸¦ Content-Type ¿¡ ÁöÁ¤ÇØ¾ß ÇÏ´Â °æ¿ì°¡ ÀÖÀ¸¸ç ÀÌ·² °æ¿ì -H, –header ¿É¼ÇÀ¸·Î ¼³Á¤ÇÒ HTTP Çì´õÀÇ À̸§°ú °ªÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. 
JSON Çü½ÄÀÏ °æ¿ì ÄÁÅÙÃ÷ Çü½ÄÀÌ "Content-Type: application/json" À̾î¾ß ÇϹǷΠ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

curl -u userid:password -H "Content-Type: application/json" http://www.example.com/user/login

 

HTTP µ¥ÀÌŸ POST 

HTTP ·Î ¼­¹ö¿¡ ¿äû½Ã ±âº» ¹æ½ÄÀº GET ÀÌ´Ù. POST ¹æ½ÄÀ» »ç¿ëÇÒ °æ¿ì  -X,–request  ¿É¼Ç µÚ¿¡ POST ¸¦ ¸í½ÃÇÏ¿© ¿äû ¹æ½ÄÀ» ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç POST ÇÒ µ¥ÀÌŸ´Â -d, –data ¿É¼ÇÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº µ¥ÀÌŸ¸¦ POST ÇÏ´Â ¿¹Á¦·Î HTTP ¿äûÀ» ¼­¹ö´Ü¿¡¼­ È®ÀÎÇϱâ À§ÇØ HTTP ¿äûÀ» °Ë»çÇØ ÁÖ´Â ¼­ºñ½ºÀÎ http://requestb.in À» ÅëÇØ Àü¼ÛÇÑ ³»¿ëÀ» È®ÀÎÇØ º¸ÀÚ.

curl -d "name=Bruce+Wayne&age=30" http://requestb.in/1ap5m1g1

 

Æ÷½ºÆ®ÇÒ µ¥ÀÌŸ´Â Ư¼ö ¹®ÀÚ°¡ ÀÖÀ» °æ¿ì ÀÏÀÏÀÌ º¯È¯ÇØ ÁÖ¾î¾ß ÇÑ´Ù. À§¿¡¼­´Â name ÆĶó¹ÌÅÍÀÇ °ª¿¡ °ø¹éÀÌ ÀÖÀ¸¹Ç·Î + ·Î º¯È¯Çؼ­ Àü¼ÛÇßÁö¸¸ µ¥ÀÌŸ°¡ ¸¹À» °æ¿ì ÀÏÀÏÀÌ ¼öÀÛ¾÷À¸·Î º¯È¯ÇØ ÁÖ´Â °ÍÀº ¹ø°Å·Î¿î ÀÏÀÌ´Ù.

--data-urlencode ¿É¼ÇÀ» »ç¿ëÇϸé curl ÀÌ URL Çü½ÄÀ¸·Î ÀÎÄÚµùÇØ ÁֹǷΠÆí¸®ÇÏ´Ù.

ÁÖÀÇÇÒ Á¡Àº ¸ðµç Ư¼ö ¹®ÀÚ¸¦ ÀÎÄÚµù ÇØ ÁֹǷΠÆĶó¹ÌÅÍÀÇ ±¸ºÐÀÚÀÎ & µµ ÀÎÄÚµùÇϹǷΠÆĶó¹ÌÅÍ°¡ ¿©·¯ °³ÀÏ °æ¿ì ¿É¼ÇÀ» ¿©·¯ ¹ø »ç¿ëÇÏ¿© ºÐ¸®ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ´ÙÀ½Àº --data-urlencode ¿É¼ÇÀ¸·Î À§ POST µ¥ÀÌŸ¸¦ ¼öÇàÇÏ´Â ¿¹Á¦ÀÌ´Ù.

curl --data-urlencode "name=Bruce Wayne" --data-urlencode "age=30" http://requestb.in/1ap5m1g1

POST ÇÒ µ¥ÀÌŸ°¡ ÆÄÀÏ·Î Á¸ÀçÇÒ °æ¿ì -d ¿É¼ÇµÚ¿¡ @ ¸¦ ºÙÀÌ°í ÆÄÀϸíÀ» ¸í½ÃÇÏ¸é µÈ´Ù. REST API ¸¦ Á¦°øÇÏ´Â ¼­ºñ½º°¡ Àִµ¥ »ç¿ëÀÚ ÀÎÁõÀÌ ÇÊ¿äÇÏ°í µ¥ÀÌŸ´Â JSON Çü½ÄÀ¸·Î Àü¼ÛÇØ¾ß ÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ. ¼­¹ö¿¡ º¸³¾ µ¥ÀÌŸ´Â data.js ¶ó´Â ÆÄÀÏ¿¡ ±â¼úµÇ¾î ÀÖ´Ù.

data.js
{
    "string""foo",
    "number"5
}

ÀÌÁ¦ curl À» ÀÌ¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ »ç¿ëÀÚ ÀÎÁõ ¹× REST API ¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. 

curl -d @data.js -u userid:password  -H "Content-Type: application/json" http://requestb.in/1ap5m1g1

 

Àü¼ÛÇÒ ÆÄÀÏÀÌ  À̹ÌÁö³ª ¾ÐÃà ÆÄÀϵîÀÇ ¹ÙÀ̳ʸ® ÆÄÀÏÀÏ °æ¿ì -d ¿É¼Ç ´ë½Å --data-binary ¿É¼ÇÀ» Ãß°¡ÇÏ¸é ¹ÙÀ̳ʸ®·Î ó¸®ÇϹǷΠµ¥ÀÌŸ°¡ ±úÁöÁö ¾Ê°í Àü¼ÛµÈ´Ù.

curl --data-binary @myBinary.jpg http://requestb.in/1ap5m1g1

 

È°¿ë

curl Àº ´Ù¾çÇÑ ÇÁ·ÎÅäÄÝÀ» Áö¿øÇÏ´Â À¯¿ëÇÑ URL 󸮱â·Î¼­ ƯÈ÷ HTTP/HTTPS ¼­¹ö¿Í ¿¬°áÇÏ¿© µ¥ÀÌŸ¸¦ ÁÖ°í ¹ÞÀ» ÇÊ¿ä°¡ ÀÖÀ»¶§ Æí¸®ÇÏ´Ù. À¥ ¼­¹ö³ª WAS ¸¦ ±¸ÃàÇßÀ» ¶§ Á¦´ë·Î µ¿ÀÛÇÏ´ÂÁö¸¦ curl À» ÀÌ¿ëÇÏ¿© °£´ÜÇÏ°Ô È®ÀÎÇØ º¼ ¼ö ÀÖ°í  ¿ø°ÝÁö ¼­¹ö¿¡¼­ ÆÄÀÏÀ» ´Ù¿î¹Þ°Å³ª ¼­¹ö¿¡ µ¥ÀÌŸ¸¦ Àü¼ÛÇÒ ¼ö µµ ÀÖ´Ù.

ƯÈ÷ REST ±â¹Ý API ¸¦ Á¦°øÇÏ´Â À¥¼­ºñ½º°¡ ÀÖÀ» °æ¿ì curl ÀÇ POST ±â´ÉÀ» ÀÌ¿ëÇϸé REST API ÀÇ Á¤»ó µ¿ÀÛ ¿©ºÎ¸¦ ¼Õ½±°Ô µð¹ö±ëÇÒ ¼ö ÀÖÀ¸¸ç Atalssian JIRA³ª SalesForce.com µîÀÇ ¸¹Àº REST API ¼³¸í¼­ÀÇ ¿¹Á¦·Î curl ·Î REST API È£ÃâÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÏ°í ÀÖ´Ù.

 

ÇâÈÄ ¼³Ä¡ÇÒ redmine À̳ª sonatype nexus, jenkins ¼­¹öµîµµ REST API ¸¦ Á¦°øÇϹǷΠ¼­¹öÀÇ ±â´ÉÀ» ¿ÜºÎ¿¡¼­ API ·Î »ç¿ëÇÏ·Á¸é REST API ¿¡ ´ëÇÑ ÀÌÇØ¿Í »ç¿ëÀº ÇʼöÀ̸ç À̶§ curl Àº À¯¿ëÇÑ µµ±¸·Î È°¿ëÇÒ ¼ö ÀÖ´Ù.

 

°°ÀÌ º¸±â