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/

태그: ,

카테고리:

업데이트:

댓글남기기