Profile picture

[Linux] curl vs wget: 어떤 도구를 써야할까?

JaehyoJJAng2023년 03월 15일

개요

오늘은 터미널에서 자주 쓰이는 두 가지 도구, curlwget에 대해 기록해보려고 합니다!


둘 다 웹에서 데이터를 가져오는 데 유용하지만, 용도와 특징이 조금 달라서 상황에 따라 골라 쓰면 좋아요!


curl: 데이터 전송의 만능 도구

curlClient URL의 줄임말로, HTTP, HTTPS, FTP등 다양한 프로토콜을 지원하는 강력한 도구예요.

주로 웹에서 데이터를 가져오거나 API 요청을 테스트할 때 많이 사용됩니다!

기본적으로 요청 결과를 터미널에 출력해주니까, 바로 확인하고 싶을 때 편리하죠.

파일로 저장하려면 옵션을 추가하면 되구요.


강점

  • GET, POST 같은 HTTP 메서드를 자유롭게 사용 가능해요.
  • 헤더 설정, 인증 처리 등 복잡한 요청도 쉽게 처리 가능합니다.
  • 다목적 도구라 많은 개발자들이 사용합니다 ~

자주 사용하는 옵션

옵션 설명 예제
-o <파일명> 응답을 파일로 저장 curl -o page.html https://example.com
-O 원격 파일명으로 저장 curl -O https://example.com/file.txt
-X <메서드> HTTP 메서드 지정 (GET, POST 등) curl -X POST https://api.example.com
--d <데이터> POST 요청에 데이터 전송 curl -d "key=value" https://api.example.com
``-H <헤더>` 커스텀 헤더 추가 curl -H "Authorization: Bearer token" https://api.example.com
``-u <사용자:비번>` 기본 인증 (Basic Auth) curl -u user:pass https://example.com
-L 리다이렉션 따라가기 curl -L https://example.com
-s Silent 모드 (진행률 출력 안 함) curl -s https://example.com

사용 예제

1. 웹 페이지 내용 확인하기

curl https://example.com

2. 파일로 저장하기

curl -o example.html https://example.com

-> 응답을 example.html 파일로 저장


3. API에 POST 요청 보내기

curl -X POST -d "key=value" https://api.example.com

데이터를 실어서 POST 요청을 보냅니다.


wget: 다운로드의 달인

wgetWeb Get의 약자로, 파일이나 웹사이트를 다운로드하는 데 특화된 도구예요.

요청한 데이터를 터미널에 띄우지 않고 바로 파일로 저장해주니까, "다운로드"가 주 목적일 때 딱이죠!

심지어 웹사이트 전체를 재귀적으로 내려받을 수도 있답니다.


강점

  • 파일 다운로드가 기본 동작이라 사용법이 직관적
  • 재귀 다운로드로 사이트 콘텐츠를 통째로 가져올 수 있음.
  • 단순하고 빠름.

자주 사용하는 옵션

옵션 설명 예제
-O <파일명> 지정한 파일명으로 저장 wget -O custom.txt https://example.com/file.txt
-P <경로> 다운로드 경로 지정 wget -P /home/user/downloads https://example.com/file.txt
-r 재귀적으로 다운로드 (하위 링크까지) wget -r https://example.com
-R 지정한 패턴에 맞는 파일을 다운로드에서 제외 wget -R "index.html*"
-np (No Parent) 상위 디렉토리로 올라가지 않음 (no-parent) wget -r -np https://example.com/subdir/
-nH (No Host Directories) 호스트 이름(도메인 이름)으로 디렉토리를 만들지 않도록 설정. wget -nH https://example.com/subdir
--cut-dirs=<count> URL 경로에서 지정한 수만큼 디렉토리 단계 생략. wget --cut-dirs=1
-A <패턴> 지정한 파일 형식만 다운로드 (accept) wget -r -A "*.jpg,*.png" https://example.com
-c 중단된 다운로드 이어서 진행 wget -c https://example.com/bigfile.zip
-q Quiet 모드 (출력 안 함) wget -q https://example.com/file.txt
-t <횟수> 재시도 횟수 지정 wget -t 5 https://example.com

사용 예제

1. 파일 다운로드

wget https://example.com/file.txt

2. 이름 바꿔서 저장

wget -O custom_name.txt https://example.com/file.txt

3. 웹 사이트 전체 다운로드

wget -r -l 2 https://example.com
  • example.com을 2단계 깊이까지 재귀적으로 다운로드.

4. 조건을 붙여서 재귀적으로 다운로드하기.

wget -r -np -nH --cut-dirs=1 -P "$target_dir" -R "index.html*" "$SyncBase/$folder/"

-r (Recursive)

  • 설명: 재귀적으로 다운로드하라는 뜻이야. 지정한 URL에서 링크를 따라가며 하위 파일과 디렉토리까지 모두 가져와.
    • 여기서 역할: $SyncBase/$folder/ 아래에 있는 모든 파일과 폴더를 다운로드하려고 설정된 거야.
    • 예시: wget -r https://example.com → example.com 아래 모든 콘텐츠를 가져옴.

-np (No Parent)

  • 설명: 상위 디렉토리로 올라가지 않도록 제한해. 재귀 다운로드(-r)를 할 때, 부모 디렉토리로 올라가서 불필요한 데이터를 가져오는 걸 막아줘.
  • 여기서 역할: $SyncBase/$folder/ 이하만 다운로드하고, 그 위로는 올라가지 않도록 보장해.
  • 예시: wget -r -np https://example.com/sub/ → sub/ 이하만 다운로드.

-nH (No Host Directories)

  • 설명: 호스트 이름(도메인 이름)으로 디렉토리를 만들지 않도록 설정해. 기본적으로 wget은 URL의 호스트명(예: example.com)을 기반으로 로컬에 디렉토리를 만들지만, 이 옵션을 쓰면 그걸 생략해.
  • 여기서 역할: 다운로드된 파일이 $target_dir에 바로 저장되도록 하고, $SyncBase의 호스트명 디렉토리(예: example.com/)가 추가되지 않게 함.
  • 예시: wget -nH https://example.com/file.txt → file.txt가 바로 저장됨(호스트 디렉토리 없이).

--cut-dirs=1

  • 설명: URL 경로에서 지정한 수만큼 디렉토리 단계를 생략해. 기본적으로 wget은 URL의 디렉토리 구조를 그대로 로컬에 반영하는데, 이 옵션으로 일부를 잘라낼 수 있어.
  • 여기서 역할: $SyncBase/$folder/에서 디렉토리 하나를 생략하고 저장해. 예를 들어, URL이 https://example.com/base/folder/file.txt라면, base/를 건너뛰고 folder/file.txt만 저장.
  • 예시: wget --cut-dirs=1 https://example.com/dir1/dir2/file.txt → dir2/file.txt로 저장.

-P "$target_dir" (Prefix)

  • 설명: 다운로드한 파일을 저장할 로컬 디렉토리를 지정해. $target_dir는 변수로, 실제 경로(예: /home/user/downloads)가 들어갈 거야.
  • 여기서 역할: 모든 파일을 $target_dir에 저장하도록 설정.
  • 예시: wget -P /tmp https://example.com/file.txt → /tmp/file.txt에 저장.

-R "index.html*" (Reject)

  • 설명: 지정한 패턴에 맞는 파일을 다운로드에서 제외해. 여기선 index.html로 시작하는 모든 파일(예: index.html, index.html.bak)을 무시하라는 뜻.
  • 여기서 역할: $SyncBase/$folder/에서 index.html 파일들이 필요 없어서 제외한 거야. 불필요한 기본 페이지를 건너뛰고 싶을 때 유용해.
  • 예시: wget -R "*.txt" https://example.com → .txt 파일은 다운로드 안 함.
    Tag -

Loading script...