[Linux] Curl 소개 및 자주사용하는 명령어 정리
1. Curl(Client Url) 명령어 소개
- curl은 서버와 상호작용 없이 데이터를 전송하기 위한 명령줄 유틸리티이다.
- HTTP, HTTPS, SCP, SFTP 및 FTP 등 지원되는 프로토콜 중 하나를 사용하여 데이터를 다운로드하거나 업로드할 수 있다.
- curl은 전송을 재개하고 대역폭을 제한하며 프록시 지원, 사용자 인증 등을 수행할 수 있는 다양한 옵션을 제공한다.
2. Curl 주요 옵션 소개
옵션 | 설명 |
---|---|
-k | https 프로토콜에서 SSL 인증서에 대한 검증없이 연결 |
-i | HTTP 헤더만 보여주고 컨텐츠는 표시하지 않음 |
-D | HTTP 헤더를 file에 기록 (덤프) |
-L | HTTP 301, 302 응답을 받은 경우 리디렉션 URL로 따라간다. |
-d | HTTP POST 요청 데이터 입력 |
-v | 동작하면서 세세한 내용을 출력 |
-J | 헤더에 있는 파일 이름으로 다운로드 파일을 저장 |
-o | curl로 받아온 내용을 FILE 이라는 이름의 파일로 저장 |
-O | 파일 저장시 리모트에 저장되어 있던 이름을 그대로 가져와서 로컬에 저장,curl -O URL1 -O URL2 와 같이 이어서 작성하면 여러개의 파일 다운로드 가능 |
-s | 진행 내용이나 메시지들을 출력하지 않음 |
-X | 요청시 사용할 메소드의 종류 (GET, POST, PUT, PATCH, DELETE) |
-i | 응답에 Content 만 출력하지 않고 서버의 Reponse 도 포함해서 출력 |
-A | 서버에 User-Agent 보내기 |
-u | 서버 사용자 및 비밀번호 |
-T | 로컬 FILE 을 대상으로 전송 |
-f | HTTP 오류 시 자동으로 실패 (출력 없음) |
-G | 전송할 사이트 url 및 ip 주소 |
-H | 전송할 헤더를 지정 |
-v | 동작하면서 자세한 헤더 통신 옵션 출력 |
-C | 파일 다운로드 재개 |
3. 개인적으로 자주사용하는 curl 명령어 정리
- 간단한건 서버에서 실행하고, Body정보등을 넣어서 전송테스트가 필요한 경우 포스트맨(Postman)을 활용한다.
1) 파일 다운로드 관련
# -o 옵션: 지정된 이름으로 다운로드
[root@rocky8: ~/temp]# curl -o vue-v2.6.10.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 423k 0 423k 0 0 7701k 0 --:--:-- --:--:-- --:--:-- 7701k
[root@rocky8: ~/temp]# ll
total 424
-rw-r--r-- 1 root root 433738 Mar 31 00:22 vue-v2.6.10.js
# -O옵션: URL에 있는 파일 다운로드
[root@rocky8: ~/temp]# curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 423k 0 423k 0 0 7843k 0 --:--:-- --:--:-- --:--:-- 7843k
[root@rocky8: ~/temp]# ll
total 848
-rw-r--r-- 1 root root 433738 Mar 31 00:22 vue.js
-rw-r--r-- 1 root root 433738 Mar 31 00:22 vue-v2.6.10.js
2) 헤더보기관련
# -I옵션: 헤더만 출력
[root@rocky8: ~/temp]# curl -I google.com
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Content-Security-Policy-Report-Only: object-src 'none';base-uri 'self';script-src 'nonce-iF0xWkrI32m7JXt_xfzNFA' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
Date: Thu, 30 Mar 2023 15:30:47 GMT
Expires: Sat, 29 Apr 2023 15:30:47 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
# -i옵션: 헤더 및 본문 출력
[root@rocky8: ~/temp]# curl -i google.com
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Content-Security-Policy-Report-Only: object-src 'none';base-uri 'self';script-src 'nonce-EoDrMaHLKsiJjS8zj0qNpg' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
Date: Thu, 30 Mar 2023 15:30:43 GMT
Expires: Sat, 29 Apr 2023 15:30:43 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
<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>
3) 요청 및 응답관련 상세 정보 출력
# -v옵션: 세부정보 출력
[root@rocky8: ~/temp]# curl -v google.com
* Rebuilt URL to: google.com/
* Trying 142.250.66.78...
* TCP_NODELAY set
* Connected to google.com (142.250.66.78) port 80 (#0)
> GET / HTTP/1.1
> Host: google.com
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.com/
< Content-Type: text/html; charset=UTF-8
< Content-Security-Policy-Report-Only: object-src 'none';base-uri 'self';script-src 'nonce-F27BEzhDQku0L_Ktzo1f9A' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
< Date: Thu, 30 Mar 2023 15:32:25 GMT
< Expires: Sat, 29 Apr 2023 15:32:25 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 219
< X-XSS-Protection: 0
< X-Frame-Options: SAMEORIGIN
<
<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>
* Connection #0 to host google.com left intact
4) 프록시 서버통해서 전송
# 192.168.44.1 포트 8888에서 프록시를 사용하여 지정된 리소스를 다운로드
curl -x 192.168.44.1:8888 http://linux.com/
# 프록시 서버에 인증이 필요한 경우 -U(--proxy-user) 옵션을 사용하고 사용자 이름과 암호를 기재
curl -U username:password -x 192.168.44.1:8888 http://linux.com/
댓글남기기