cURL(cute URL retriever) 은 URL 형식을 통해 데이터를 전송할 수 있는 강력한 커맨드라인 도구입니다. 이 유틸리티는 다양한 프로토콜을 지원하며, 특히 웹 서버와의 상호작용, API 테스트, 파일 다운로드 등 네트워킹 작업에서 필수적으로 사용됩니다.
기본 문법 구조
cURL [선택사항] [전송 대상 URL]
주요 설정 옵션 그룹
다양한 기능은 크게 네 가지 카테고리로 나뉘며, 각 요구사항에 맞춰 조합하여 사용합니다.
네트워크 연결 및 제어
- --connect-timeout <초>: TCP 연결을 시도하는 최대 시간을 초 단위로 제한합니다.
- --max-redirs <숫자>: 리다이렉션이 발생할 때 따라가는 최대 횟수를 설정합니다.
- --interface <인터리페이스>: 특정 네트워크 인터페이스를 사용하여 요청을 보냅니다.
- -4 / -6: DNS 해석 결과를 각각 IPv4 또는 IPv6 주소로 강제합니다.
- -x, --proxy: 요청을 전송하기 위해 프록시 서버 경로를 지정합니다.
데이터 전송 및 메서드 조작
- -X, --request <방법>: HTTP 메서드를 명시합니다 (예: GET, POST, PUT, DELETE).
- -d, --data: POST 요청 본문에 일반 텍스트 데이터를 포함합니다.
- -F, --form: 파일 업로드나 폼 데이터 전송을 시뮬레이션합니다.
- -d, --data-binary: POST 요청 본문을 바이너리 스트림으로 처리합니다.
- --data-urlencode: POST 데이터를 자동으로 URL 인코딩하여 전송합니다.
헤더 및 인증 관리
- -H, --header <라인>: 커스텀 HTTP 헤더를 추가하거나 수정합니다.
- -u, --user <사용자:비밀번호>: HTTP 기본 인증 정보를 입력합니다.
- --digest: 디지털 인증 방식을 활성화합니다.
- -A, --user-agent: 사용자 에이전트 문자열을 브라우저처럼 변경합니다.
- -b, --cookie / -c, --cookie-jar: 쿠키 값을 읽거나 저장할 파일을 지정합니다.
출력 및 로깅 정보
- -o, --output <파일>: 응답 내용을指定的된 파일로 저장합니다.
- -i, --include: 응답 헤더를 함께 출력합니다.
- -I, --head: 실제 본문 대신 응답 헤더만 조회합니다.
- -s, --silent: 진행률 메시지 등을 숨기고 조용히 실행합니다.
- -#: 전송 상태를 프로그레스 바 형태로 시각화합니다.
- -w, --write-out: 연결 완료 후 구체적인 통계 형식을 정의하여 출력합니다.
실제 적용 시나리오 예제
1. 단순 GET 요청 전송
표준 HTTP 메서드로 특정 엔드포인트를 조회하는 가장 기본적인 형태입니다.
$ curl -X GET https://api.example.com/status
2. 파일 다운로드 및 진행 상황 표시
대용량 파일을 수신할 경우, 다운로드 진행률을 모니터링하면서 원격 파일명을 그대로 유지하여 저장합니다.
$ curl -O -# https://server.net/large_data/archive.tar.gz
3. RESTful API 호출 (JSON 페이로드)
서브미션 타입에 맞는 헤더와 JSON 형태의 데이터를 포함한 POST 요청을 수행합니다.
$ curl -X POST \
-H "Authorization: Bearer $TOKEN_VALUE" \
-H "Content-Type: application/json" \
-d "{\"id\": 123, \"status\": \"active\"}" \
https://jsonplaceholder.typicode.com/posts
4. 사용자 권한 검증이 필요한 서비스 접근
서비스가 요청 시 아이디와 비밀번호를 요구할 경우, 기본 인증 방식을 사용하여 자격 증명을 제공합니다.
$ curl -X POST -u admin_user:P@ssw0rd! https://secure-login.service.com/auth
5. 네트워크 지연 시간 및 속도 분석
-w 옵션을 사용하여 도메인 이름 해결, TCP 접속, 첫 번째 바이트 도착, 전체 완료까지의 세부적인 소요 시간과 다운로드 속도를 확인할 수 있습니다.
$ curl -o /dev/null -s -w "DNS Lookup: %{time_namelookup}s\nConnection: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\nSpeed: %{speed_download} bytes/s\n" http://www.target-site.com/resource