SOITZ

항상 찾게되는 curl 사용법 정리

Published on

curl은 데이터를 전송하기 위한 명령줄 도구로, 다양한 프로토콜(예: HTTP, FTP)을 지원합니다. 이 글에서는 curl의 기본 사용법과 다양한 옵션을 알아보고, 실제 예제를 통해 쉽게 따라할 수 있는 방법을 소개합니다.

기본 구조

curl [옵션] [URL]
웹 페이지 내용 보기
curl https://soitz.com

이 명령은 http://blog.soitz.com의 HTML 내용을 콘솔에 출력합니다.


curl 옵션

  • -o 또는 --output [파일명]: 출력을 지정된 파일에 저장합니다.
  • -I 또는 --head: HTTP 헤더 정보만을 가져옵니다.
  • -X 또는 --request [명령]: 사용할 HTTP 메소드를 지정합니다 (예: GET, POST).
  • -H 또는 --header: 특정 HTTP 헤더를 추가합니다.
  • -d 또는 --data [데이터]: POST 요청에 포함될 데이터를 설정합니다.
  • --data-urlencode [데이터]: URL 인코딩된 데이터를 POST 요청에 포함합니다.
  • -u 또는 --user [사용자:비밀번호]: 서버 인증을 위한 사용자 이름과 비밀번호를 지정합니다.
  • -F 또는 --form [스트링]: 폼 데이터를 전송합니다.
  • -b 또는 --cookie: 쿠키를 설정하는데 사용됩니다. 이 옵션을 사용하면 curl 요청에 쿠키 데이터를 포함시킬 수 있습니다.
  • -k 또는 --insecure: SSL 인증서 검증을 하지 않습니다.
  • -L 또는 --location: 리디렉션을 따라갑니다.
  • -c : 쿠키를 지정된 파일에 저장합니다.

curl 옵션 예시

1. -o / --output [파일명]

  • 설명: 출력을 지정된 파일에 저장합니다.
  • 예시: 웹 페이지를 파일로 저장
curl -o saved_page.html http://example.com

이 명령은 http://example.com의 내용을 saved_page.html 파일에 저장합니다.

2. -I / --head

  • 설명: HTTP 헤더 정보만을 가져옵니다. 이 옵션은 실제 컨텐츠는 다운로드하지 않고 헤더 정보만 확인하고 싶을 때 사용합니다.
  • 예시: 웹 페이지의 HTTP 헤더 정보 확인
curl -I http://example.com

http://example.com의 HTTP 헤더 정보를 출력합니다.

3. -X / --request [명령]

  • 설명: 사용할 HTTP 메소드를 지정합니다. 예를 들어, GET, POST, PUT, DELETE 등이 있습니다.
  • 예시: POST 요청 전송
curl -X POST http://example.com

http://example.com으로 POST 요청을 보냅니다.

4. -H / --header

  • 설명: 특정 HTTP 헤더를 추가합니다. 이 옵션은 사용자 정의 헤더를 요청에 포함시킬 때 사용됩니다.
  • 예시: 사용자 정의 헤더 추가
curl -H "Content-Type: application/json" http://example.com

Content-Type: application/json 헤더를 포함하여 요청을 보냅니다.

5. -d / --data [데이터]

  • 설명: POST 요청에 포함될 데이터를 설정합니다. 이 옵션은 application/x-www-form-urlencoded 형식의 데이터를 보내는 데 사용됩니다.
  • 예시: POST 요청과 함께 데이터 전송
curl -d "param1=value1&param2=value2" -X POST http://example.com

param1=value1&param2=value2 데이터를 포함하여 POST 요청을 보냅니다.

1. 간단한 JSON 데이터 전송:

curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1", "key2":"value2"}' http://example.com/api

이 명령은 {"key1":"value1", "key2":"value2"}라는 JSON 데이터를 http://example.com/api로 POST 요청합니다.

2. 파일에서 JSON 읽어서 전송: 만약 JSON 데이터가 파일에 저장되어 있다면, 다음과 같이 @ 기호를 사용하여 파일의 내용을 POST 요청에 포함시킬 수 있습니다.

curl -X POST -H "Content-Type: application/json" -d @data.json http://example.com/api

이 경우, data.json 파일의 내용을 http://example.com/api로 POST 요청합니다.

JSON 데이터 주의사항
  • JSON 데이터는 반드시 유효한 형식이어야 합니다. 예를 들어, 문자열은 큰따옴표(")로 감싸야 하며, 객체의 키도 마찬가지입니다.
  • 명령줄에서 직접 JSON 데이터를 입력할 때는 특수 문자(예: 큰따옴표)를 이스케이프 처리하거나, 단일 따옴표(')를 사용하여 전체 JSON을 감싸는 것이 좋습니다.
  • 큰 JSON 데이터를 다룰 때는 파일을 사용하는 것이 더 편리할 수 있습니다.

6. --data-urlencode [데이터]

  • 설명: URL 인코딩된 데이터를 POST 요청에 포함합니다. 이 옵션은 URL 인코딩이 필요한 데이터를 보낼 때 유용합니다.
  • 예시: URL 인코딩된 데이터와 함께 POST 요청 보내기
curl --data-urlencode "param1=value1 with spaces" http://example.com

param1이 "value1 with spaces" 값을 갖는 인코딩된 데이터를 POST 요청으로 보냅니다.

7. -u / --user [사용자:비밀번호]

  • 설명: 서버 인증을 위한 사용자 이름과 비밀번호를 지정합니다. 이 옵션은 기본 인증이 필요한 요청에 사용됩니다.
  • 예시: 인증 정보와 함께 요청 보내기
curl -u username:password http://example.com

지정된 사용자 이름과 비밀번호를 사용하여 http://example.com에 요청을 보냅니다.

8. -F / --form [스트링]

  • 설명: 폼 데이터를 전송합니다. 이 옵션은 multipart/form-data 형식을 사용하여 파일 업로드 등에 사용됩니다.
  • 예시: 파일 업로드
curl -F "file=@path/to/file" http://example.com/upload

지정된 파일을 http://example.com/upload로 업로드합니다.

  • 설명: 쿠키 데이터를 전송합니다. -b 옵션과 유사하게 사용됩니다.
  • 예시: 쿠키 포함 요청
curl --cookie "sessionid=abc123" http://example.com
curl -b "sessionid=abc123" http://example.com

sessionid=abc123 쿠키를 포함하여 http://example.com에 요청을 보냅니다.

10. -k / --insecure

  • 설명: SSL 인증서 검증을 하지 않습니다. 이 옵션은 테스트 목적으로 보안이 강화되지 않은 서버에 접근할 때 유용합니다.
  • 예시: SSL 인증서 검증 없이 요청
curl -k https://example.com

SSL 인증서 검증을 하지 않고 https://example.com에 접근합니다.

11. -L / --location

  • 설명: 리디렉션을 따라갑니다. 서버가 리디렉션을 반환하는 경우, curl은 해당 리디렉션을 자동으로 따라가 요청을 수행합니다.
  • 예시: 리디렉션 따라가기
curl -L http://example.com

http://example.com이 리디렉션하는 경우, 자동으로 해당 위치로 이동하여 요청을 수행합니다.

12. -c

  • 설명: 서버로부터 받은 쿠키를 지정된 파일에 저장합니다.
  • 예시: 로그인 후 쿠키 저장

1. 로그인 후 쿠키 저장

curl -c cookies.txt -d "username=user&password=pass" http://example.com/login

이 명령은 http://example.com/login에 로그인 요청을 보내고, 응답으로 받은 쿠키를 cookies.txt 파일에 저장합니다.

2. 저장된 쿠키 사용

이후에 cookies.txt에 저장된 쿠키를 사용하여 다른 요청을 보낼 수 있습니다. 예를 들어, 로그인 상태를 유지해야 하는 페이지에 접근할 때 이 쿠키 파일을 사용할 수 있습니다.

curl -b cookies.txt http://example.com/profile

-b 옵션은 쿠키 파일을 읽어 해당 쿠키를 사용하여 요청을 보내는 데 사용됩니다.

주의사항

  • -c 옵션으로 생성된 쿠키 파일은 일반 텍스트 형식으로 저장됩니다. 따라서, 이 파일에는 민감한 정보가 포함될 수 있으므로 보안에 주의해야 합니다.
  • 쿠키 파일을 다룰 때는 파일의 접근 권한을 제한하고, 민감한 환경에서는 안전한 방법으로 취급해야 합니다.

추가 옵션

1. 쿼리 문자열을 사용한 GET 요청

URL에 쿼리 문자열을 포함시켜 GET 요청을 보내는 방법도 매우 중요합니다. 예를 들어, 다음 명령은 http://example.com/api에 쿼리 파라미터를 포함하여 GET 요청을 보냅니다.

curl http://example.com/api?key1=value1&key2=value2

2. 타임아웃 설정

특정 시간 동안 응답이 없을 때 연결을 종료하도록 타임아웃을 설정하는 것이 중요할 수 있습니다. -m 또는 --max-time [초] 옵션을 사용하여 이를 설정할 수 있습니다.

curl -m 10 http://example.com

이 명령은 최대 10초 동안만 http://example.com에 연결을 시도합니다.

3. 프록시 서버 사용

특정 경우에는 요청을 프록시 서버를 통해 전송해야 할 필요가 있습니다. -x 또는 --proxy [프록시 주소] 옵션으로 이를 설정할 수 있습니다.

curl -x http://proxy-server:port http://example.com

4. HTTPS 연결에 대한 SSL 인증서 제공

보안이 중요한 HTTPS 요청에서는 -E 또는 --cert [인증서 경로] 옵션을 사용하여 클라이언트 인증서를 제공할 수 있습니다.

curl -E /path/to/cert.pem https://example.com

5. 자세한 정보 출력 (Verbose 모드)

-v 또는 --verbose 옵션을 사용하면 요청과 응답에 대한 자세한 정보를 얻을 수 있습니다. 이는 디버깅 시 매우 유용합니다.

curl -v http://example.com

6. 사용자 에이전트 설정

웹 사이트가 클라이언트의 종류(예: 브라우저, 모바일 장치)에 따라 다르게 응답할 때, -A 또는 --user-agent 옵션으로 사용자 에이전트를 설정할 수 있습니다.

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://example.com

7. 리퍼러 헤더 설정

일부 웹 서비스는 리퍼러(Referrer) 헤더를 확인합니다. -e 또는 --referer 옵션으로 이 헤더를 설정할 수 있습니다.

curl -e http://referrer-site.com http://example.com

8. FTP 전송

curl은 FTP 서버로부터 파일을 다운로드하거나 업로드하는 데에도 사용할 수 있습니다.

  • FTP 서버에서 파일 다운로드:
curl ftp://ftp.example.com/file.txt -o local_file.txt
  • FTP 서버로 파일 업로드:
curl -T local_file.txt ftp://ftp.example.com/file.txt

9. 진행률 표시

큰 파일을 다운로드하거나 업로드할 때 진행률을 표시하고 싶다면, -# 옵션을 사용합니다.

curl -# -o large_file.zip http://example.com/large_file.zip

10. 웹사이트 및 API의 성능 측정

타임아웃을 설정하여 응답 시간 측정

curl -o /dev/null -s -w "Total Time: %{time_total}\n" https://soitz.com

11. 보안 검사 및 SSL 인증서 확인

SSL 인증서 정보 검사

curl -Iv https://example.com

HTTPS 연결을 통해 SSL 인증서의 유효성 및 세부 정보를 확인할 때 사용합니다.

12. 쿠키를 사용한 세션 유지

로그인 후 쿠키를 사용하여 세션 유지

curl -c cookies.txt -d "username=user&password=pass" https://example.com/login
curl -b cookies.txt https://example.com/user/profile

첫 번째 명령은 로그인을 시도하고 쿠키를 cookies.txt에 저장합니다. 두 번째 명령은 이 쿠키를 사용하여 로그인 상태를 유지하면서 사용자 프로필 페이지에 접근합니다.

curl은 이처럼 다양한 시나리오에 유연하게 사용될 수 있는 강력한 명령줄 도구입니다. 이러한 옵션들을 적절히 조합하면, 거의 모든 유형의 HTTP, HTTPS 또는 FTP 요청을 처리할 수 있습니다.