cURL
curl 이란?
개발자가 CLI로 데이터 전송을 가능하게 하는 도구
쉽게 말해 웹브라우저에서 CLI 로 읽고 쓰고 보고 뜯고 맛보고 즐길수 있다 이말
cli는 다양한 프로토콜을 지원한다고 한다. 하지만 관심없다
우리는 ㅈ밥들이니 https 만 다뤄볼꺼다
바로 시작해보자
터미널을 열고
[ curl google.com ] 을 쳐보면
curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
curl 을 가지고 놀다보면 규격화된 코드들을 많이 접할수 있어서 좋다
코드 301 은 사이트의 도메인이 이전되었다는걸 뜻한다
위에서는 http://www.google.com 으로 이전되었다고 적혀있다
그럼 [curl http://www.google.com ] 을 쳐보자 ( 사실 http:// 는 안붙여도 됨 )
curl www.google.com
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ko"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="u2o5P6KLRQrC7g">(function(){window.google={kEI:'8xBIY6yiI_wBQ',kEXPI:'0,1306,873,1710,4349,206,4804,2316,383,246,5,5367,1123753,1197699,380792,16114,28684,22431,1361,12318,2817,14764,4998,13228,3847,10622,22743,2368,2711,1593,1279,2742,149,1103,840,2197,4100,4120,2023,1777,521,14669,3227,2845,7,33770,1850,15757,3,346,230,6459,149,13975,4,1528,2304,7039,27731,4164,3193,11040,2618,4437,16786,5815,2542,4094,4052,3,1167,2374,1,11942,30212,2,14022,14116,11623,5679,1021,2377,28745,4567,6256,23421,1252,5835,14967,4333,19,4231,766,2468,445,2,2,1,6960,10352,9320,250,7905,7381,15969,873,7830,7007,4797,7,1922,5784,3995,8213,10917,12192,4832,7934,9082,122,700,4,1,2,2,2,2,5337,2889,427,1069,4195,5134,1417,4477,1822,2,2020,14,82,949,1760,1181,751,202,1868,1060,6495,1009,1727,922,1936,563,256,1149,332,3265,59,166,735,507,39,3,65,459,925,199,1747,3091,1666,297,213,1072,28,3,15,858,260,443,890,1,121,456,1243,1034,148,967,192,147,980,240,1335,78,263,37,2005,1242,235,108,453,98,235,230,420,101,29,514,67,714,131,1219,126,90,510,61,2,43,181,646,528,7,1033,151,1257,174,2023,658,389,5321655,3926,74,5995834,16,24,2803376,3311,936,4,19731,1,1,346,1754,59,17,9,4,1,4,4,88,24,3,2,7451656,16496859,4042143,1964,3094,13578,3406,5543,5775,959',kBL:'stdm'};google.sn='webhp';google.kHL='ko';})();(function(){
html 태그가 나오면서 뭐가 엄청나게 찍힌다
이게 어디서부터 온거냐? 하면
새 브라우저를 열고 맥기준 F12를 눌러보자
혹은 브라우저 열고 마우스 우클릭 한다음 검사 or Inspect

curl www.google.com
으로 나온 결과는 해당 네모박스 부분이다
말그대로 이 페이지에 해당하는 모든 html 부분을 가져온다고 보면된다
우리는 이제 옵션을 붙여서 원하는 값만 가져올수 있다
curl -I [url] : 헤더값만 추출해서 보여줌
curl -I www.google.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Date: Thu, 13 Oct 2022 15:53:12 GMT
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
Expires: Thu, 13 Oct 2022 15:53:12 GMT
Cache-Control: private
Set-Cookie: 1P_JAR=2022-10-13-15; expires=Sat, 12-Nov-2022 15:53:12 GMT; path=/; domain=.google.com; Secure
Set-Cookie: AEC=AakniGMoR5bNE1VYCL2vXGTcDKG3PGn19pspOzbCOz4VLZiBE; expires=Tue, 11-Apr-2023 15:53:12 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=lax
Set-Cookie: NID=511=QRKBkk-ig5Hisz6JWcVG6DQu3JqSnnb2LSiPIVNf-RBQURz1yzpucZqy6oY1K0XlVHwZT_A89xKgIV0z5_yN-mlewihraSAZvraRuuk7Z0ahfBLH8g42U_i11U3CgBbBX-KkHYpoLVIJoo; expires=Fri, 14-Apr-2023 15:53:12 GMT; path=/; domain=.google.com; HttpOnly
이 정보도 마찬가지로 아까 들어간 F12 로 확인할수있다.
Network 탭 -> All -> www.google.com -> Headers

위의 헤더에서 curl 에 나온 헤더값에 있는 값을 확인할수 있다.
아까 curl google.com 을 치면 301 removed 가 떳는데 굳이 나는 www 를 붙이고 싶지 않다라고 하는 분은
[ curl -L google.com ] 와 같이 -L 옵션을 붙이면 옮긴 도메인으로 검색을 하게 된다.
이제 파일을 curl 로 가져오는 연습을 해보자
위에 파일을 하나 올려놨다 그리고 이 파일의 링크주소는
https://blog.kakaocdn.net/dn/ej67L4/btrOxKVCLXH/TIRAg30XEQ3lhbKPwpTxYK/tfile.txt
위와같고 우리는 이 파일을 curl 로 가져와 보겠다
[ curl -O [file url] ] : 해당 디렉토리에 file 을 원본이름 그대로 저장
curl -O https://blog.kakaocdn.net/dn/ej67L4/btrOxKVCLXH/TIRAg30XEQ3lhbKPwpTxYK/tfile.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 33 100 33 0 0 220 0 --:--:-- --:--:-- --:--:-- 221
위와 같은 출력이 나오면 파일을 성공적으로 받아오게 된다.
마지막 / 뒤의 tfile.txt 가 파일의 이름이 된다.
cat tfile.txt
myungsworld is very good blogger
그냥 받아와봤으니 내가 원하는 파일이름으로 지정해서 가져오는 욕구가 들어야 정상이다
[ curl -o [filename] [file url] ] : filename 의 이름으로 파일 저장
curl -o test.txt https://blog.kakaocdn.net/dn/ej67L4/btrOxKVCLXH/TIRAg30XEQ3lhbKPwpTxYK/tfile.txt
위를 그대로 복사 붙여넣으면 test.txt 라는 파일이름으로 받아오게 됨
curl 의 -X 옵션
처음 우리가 [ curl [url] ] 검색 결과는 [ curl -X GET [url] ] 와 같다
기본적으로 -X GET 옵션이 생략되어 있다고 보면된다.
-X 의 뒤에 오는 옵션에는
[ curl -X GET ]
[ curl -X POST ]
[ curl -X PUT ]
[ curl -X PATCH ]
REST API 호출을 할때 사용되는 옵션들이다
curl 의 Content-Type 헤더는 application/x-www-form-urlencoded 이 default 다
-d 옵션은 통신할 데이터들을 정의하는 옵션
#예제
curl -d "age=10&name=song" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://myungsworld/data
위와 같이 -H header 에 Content-Type 을 굳이 지정해주지 않아도 아래와 같이 통신해도 무방하다
# 위 코드와 동일하게 작동하지만 -H 생략
curl -d "age=10&name=song" -X POST http://myungsworld/data
하지만 JSON 으로 통신을 많이 하기에 바디에 json 값을 넣고 통신을 한다면
Content-Type 에 따로 application/json 을 기입해주어야 한다
#예제
curl -d '{"age": 15, "name":"myung"}' -H "Content-Type: application/json" -X POST http://myungsworld/data
그 이외에 유용하게 사용되는 옵션들에 대해 간단하게 알아보자
[ curl -v ] : v 는 verbose 의 약자로 보다 상세하게 출력 , 디버깅할때 사용
[ curl -s ] : s 는 slient 의 약자 , 에러가 나도 출력하지 않음 (조용하게 출력해다오 이뜻)
[ curl -S ] : 에러만 출력
[ curl -c cookieFile [url] ] : c 는 cookie 의 약어 , url 읽어온 쿠키를 해당 디렉토리 cookie 파일에 저장
[ curl -b cookieFile [url] ] : 쿠키파일을 헤더에 넣어서 url 에 request 한다
등등 더많은 옵션이 있으나 모두 다 적기에는 무리뉴..
대충 curl 이 뭔지 알고 이해했다면 그걸로 옼헤이..
'linux' 카테고리의 다른 글
linux 명령어 (0) | 2022.11.29 |
---|---|
Linux lsof 명령어 (0) | 2022.10.13 |
listen tcp :5000: bind: address already in use MacOs Monterey (0) | 2022.10.12 |
초보자를 위한 깃허브 ssh 설정 스크립트 (macOS) (0) | 2022.10.06 |
윈도우 wsl 세팅 (0) | 2022.10.04 |