제목을 보고 ping 이라고 생각했다면..?!
curl을 사용해 보았나요?
어떤 상황에서 어떤 옵션들을 사용해 보았나요?
cURL
curl은 CLI 기반의 웹 요청 도구이다.
Linux, MacOS, Windows 등의 대부분의 OS에서 사용 가능하며, HTTP, HTTPS, FTP, TELNET, SMTP, IMAP, POP3등의 프로토콜과 소켓 통신까지 지원한다.
포맷
curl [option] <url>
한 번 curl https://www.google.com
을 실행해 보자.
아마 자바스크립트 코드와 바이너리 코드들로 터미널이 꽉 찰 것이다.
curl 은 기본적으로 GET 방식으로 url을 호출한다.
curl 요청에 임의의 header를 넣을 수 있고, JSON 형식의 데이터도 넣어서 보낼 수 있다.
다양한 옵션
옵션의 순서는 중요하지 않음!
curl -v
curl 요청에 들어가는 자세한 옵션을 출력해준다.
- google.com의 IP주소를 알 수 있다. (216.58.220.110)
- 내가 보낸 request의 프로토콜(HTTP/1.1)과 형식을 알 수 있다.(GET)
- request에 입력된 다양한 header들을 볼 수있다.
https로 요청을 보내면 TLS handshake과정도 볼 수 있다.
인증서의 기간, 적용 도메인등을 모두 확인할 수 있다.
구글은 인증서 적용 기간이 매우 짧음을 알게 된다.
위 터미널에 나오는 handshake 과정을 모두 설명할 수 있나요?
curl -L
서버에서 HTTP 301 이나 HTTP 302 응답이 왔을 경우 redirection URL 로 따라간다.
--max-redirs 뒤에 숫자로 redirection 을 몇 번 따라갈지 지정할 수 있다. 기본 값은 50이다.
curl -v google.com 을 실행하면 결과값으로 다음과 같이 HTTP 301 이 리턴된다.
HTTP/1.1 301 Moved
-L 옵션을 추가하면 www.google.com으로 재접속하여 결과를 받아오게 된다.
curl --data
curl -X POST --data '{"key1":"xyz", "key2":"xyz", "key3":1, "key4":"test", "key5":"asecurity", "key6":"asecurity"}' \
http://localhost/
key-value 쌍으로 데이터를 보낼 수 있다.
이때 POST라고 명시하지 않아도 자동으로 POST 요청으로 전송된다.
curl -o
curl -o kk.yaml https://raw.githubusercontent.com/kubernetes/website/main/content/ko/examples/application/deployment.yaml
파일을 다운로드 받으며 원하는 이름으로 받을 수 있다.
kk.yaml 으로 파일을 받게 된다.
curl -O
대문자라면 원래 파일 이름으로 받게 된다.
여러 파일을 한 번에 다운로드 하려면 각 url마다 앞에 -O 옵션을 붙여서 사용하면 된다.
curl \
-O kk.yaml https://raw.githubusercontent.com/kubernetes/website/main/content/ko/examples/application/deployment.yaml
-O https://raw.githubusercontent.com/kubernetes/website/main/content/ko/examples/pods/resource/memory-request-limit.yaml
curl -k
https사이트에 SSL인증 없이 요청을 보낼 수 있다.
curl -I
curl -I --http2 https://www.google.com/
리소스의 HTTP 헤더만 가져올 수 있다.
curl -H
원하는 헤더를 입력할 수 있다.
아래 -X 예제에서 같이 확인.
curl -X
원하는 HTTP 메소드를 뒤에 붙여서 사용할 수 있다.
curl -X POST \
--data "" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/datasets?datasetId=my-dataset"
'DevOps > Linux' 카테고리의 다른 글
[Linux] 리눅스 서버 접속 방법과 도구(ubuntu) (0) | 2022.03.31 |
---|---|
Ubuntu IP 설정하기 (Virtual Box) (0) | 2022.03.13 |
Linux - GCC/Make (0) | 2021.04.22 |