cURL을 사용하여 파일을 다운로드하는 방법에 대한 전체 가이드

댓글: 0

cURL 또는 클라이언트 URL은 파일 가져오기, API와의 인터페이스, 웹 리소스 테스트 등을 위해 개발된 도구입니다. 또한 Windows, Mac 및 Linux 운영 체제에서 사용할 수 있어 모든 cURL 사용자가 파일을 쉽게 다운로드할 수 있습니다. 클라이언트 URL은 간단한 파일 다운로드뿐만 아니라 데이터 조작 및 스크립트 삽입과 관련된 고급 작업에도 적합합니다.

이 문서에서는 다운로드, 이름, 폴더 지정, 리디렉션, 속도 조절 등을 처리하는 데 유용한 몇 가지 cURL 명령어를 다루며 cURL을 사용하여 파일을 다운로드하는 방법을 다룹니다. 또한 Windows, Linux 및 Mac 시스템에서 cURL에 특화된 명령도 다룹니다.

Client URL.jpg

파일 이름 관리

다운로드한 문서를 저장할 때 올바른 파일 이름을 선택하는 것이 중요합니다. cURL은 데이터를 저장하는 것이 아니라 단말기에 표시하는 것입니다. 따라서 사용자가 파일을 저장할 위치를 선택하지 않으면 파일 시스템에서 파일을 찾을 수 없습니다.

cURL을 사용하는 모든 명령은 명령줄에서 수행됩니다(Windows - cmd 또는 PowerShell, Linux 또는 macOS - 터미널 사용).

수동으로 파일 이름을 지정하려면 "-o" 명령을 사용하거나 자세한 형식의 "-output"을 사용해야 합니다.

다음 예를 생각해 보세요:


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

이 명령은 example.com의 페이지를 가져와서 현재 작업 디렉터리에 test.html로 저장합니다.

cURL은 달리 지정하지 않는 한 기본적으로 실행 파일이 포함된 동일한 디렉터리에 파일을 저장합니다.

파일을 저장할 디렉터리를 지정하는 것과 함께 cURL을 사용하여 파일을 저장하는 방법은 다음과 같습니다:


curl -o ~/Downloads/test.html https://example.com

이 옵션을 선택하면 파일이 사용자 홈 디렉터리의 다운로드 하위 폴더에 저장됩니다.

이 구성에서는 파일이 이미 있는 경우 경고 없이 새 파일이 이전 파일을 대체합니다. 이를 우회하려면 URL에 제공된 이름으로 파일을 저장할 수 있도록 cURL -O를 입력합니다:


curl -O https://example.com/file.txt

URL에 제공된 파일 이름이 file.txt인 경우 자동으로 해당 이름으로 저장됩니다. 이러한 파일이 이미 존재하는 경우 해당 파일이 대체됩니다.

데이터 손실을 방지하기 위해 다운로드하기 전에 확인 메시지를 설정할 수 있습니다:


if [ -f file.txt ]; then
    echo "File already exists!"  
else  
    curl -O https://example.com/file.txt  
fi

이 스크립트는 먼저 파일이 이미 있는지 검사하여 파일이 없는 경우에만 파일을 다운로드합니다.

리디렉션 처리

일부 파일은 특정 위치에 저장되지 않고 리디렉션을 통해 가져옵니다. 예를 들어, 대용량 파일을 다운로드하려는 cURL 사용자는 다운로드를 시작하기 전에 브라우저가 다른 페이지로 리디렉션하는 것을 발견할 수 있습니다. cURL은 기본적으로 리디렉션을 따르지 않지만, 이를 변경할 수 있습니다.

cURL이 자동으로 리디렉션을 따르도록 설정하려면 -L 플래그를 추가합니다:


curl -L -o test.zip https://example.com/download

서버가 처음에 사용자를 리디렉션하는 경우 cURL은 새 요청을 먼저 수행한 다음 URL에서 파일을 다운로드합니다.

이것이 중요한 이유

  • 중간 페이지를 통과할 필요가 없습니다. 일부 페이지는 제한된 다운로드, 인증 또는 광고 등의 이유로 리디렉션을 구현합니다.
  • 단축 URL 사용. 예를 들어 Bit.ly 또는 TinyURL 등은 -L을 사용하지 않고 사용자를 실제 URL로 리디렉션하기만 하면 cURL이 실제 파일 대신 리디렉션된 HTML 페이지를 가져옵니다.
  • HTTPS 포워드 지원. 많은 사이트가 먼저 모든 http:// 요청을 https:// 으로 전달합니다. L을 사용하지 않으면 파일 다운로드가 작동하지 않습니다.

cURL의 메서드는 다른 URL로 연결되는 모든 링크를 따라 목표 링크에 도달할 때까지 각 리디렉션을 순서대로 처리합니다. 리디렉션이 끝없이 반복되는 경우 서버가 멈추게 됩니다. cURL에는 리디렉션 수를 관리하는 데 사용할 수 있는 명령어인 '--max-redirs'가 있습니다.


curl -L --max-redirs 5 -o file.zip https://example.com/download

이 매개변수는 cURL에 제한을 두어 너무 많은 리디렉션이 처리되어 지정된 제한을 초과하는 경우 다운로드 프로세스를 중지합니다.

리디렉션 제한을 초과했을 때 cURL이 제공하는 예는 다음과 같습니다:


curl: (47) Maximum redirection limit reached

여러 파일 다운로드

cURL을 사용하면 여러 파일을 동시에 다운로드할 수 있으며, 일부 명령은 여러 운영 체제에서 작동하는 반면 다른 명령은 Windows 또는 Linux/macOS에만 해당됩니다.

모든 OS에 공통으로 적용되는 방법

  • 서버에 여러 개의 파일이 있는 경우 필요한 만큼 -O 명령을 추가하기만 하면 됩니다:
    
    curl -O https://example.com/file1.zip -O https://example.com/file2.zip
    
    
  • file1.zip, file2.zip, file3.zip과 같이 파일이 순차적으로 번호가 매겨진 경우 파일 이름을 괄호로 묶을 수 있습니다:
    
    curl -O https://example.com/file{1,2,3}.zip
    
    

Windows용

  • Windows cURL의 경우 사용자가 urls.txt와 같은 URL이 포함된 텍스트 문서를 가지고 있는 경우 명령줄을 사용하여 파일을 다운로드할 수 있습니다:
    
    Get-Content urls.txt | ForEach-Object { curl -O $_ }
    
    
  • 파일에 번호가 매겨진 경우 루프를 사용할 수 있습니다:
    
    For ($i=1; $i -le 3; $i++) { curl -O "https://example.com/file$i.zip" }
    
    

Linux 및 MacOS의 경우

  • 목록에서 다운로드하기.

    먼저 링크 목록이 포함된 urls.txt 파일을 만듭니다:

    
    https://example.com/file1.zip 
    https://example.com/file2.zip 
    https://example.com/file3.zip
    
    

    그런 다음 명령을 실행합니다:

    
    xargs -n 1 curl -O < urls.txt
    
    
  • 반복 다운로드(Bash).

    파일에 번호가 매겨진 경우 사용하기 편리합니다:

    
    for i in {1..5}; do 
     curl -O https://example.com/file$i.zip 
    done
    
    

요금 제한

cURL을 사용하여 대용량 파일을 다운로드해야 하고 대역폭이 낮은 트래픽이 예상되는 경우 --limit-rate 플래그를 사용하면 초당 (k) 킬로바이트, 초당 (m) 메가바이트 또는 초당 (g) 기가바이트 단위로 다운로드 속도에 제한을 설정하는 데 도움이 됩니다.

cURL 사용자의 경우 명령 구조는 모든 OS에서 동일합니다:


curl --limit-rate 500k -O https://example.com/archive.zip

이 경우 500k는 다운로드 속도가 500KB/s를 초과하지 않음을 의미합니다.

기타 참고 사항:

  • --limit-rate 2m - 2MB/s로 제한됩니다;
  • --limit-rate 100k - 100KB/s로 제한됩니다.

다음은 500KB/s 다운로드 속도로 archive1.zip, archive2.zip, archive3.zip을 모두 다운로드하는 샘플 스크립트입니다.

Windows (PowerShell):


1..3 | ForEach-Object { curl --limit-rate 500k -O https://example.com/archive$_.zip }

Linux/macOS (Bash):


for i in {1..3}; do 
 curl --limit-rate 500k -O https://example.com/archive$i.zip 
done

제한 속도 옵션은 네트워크 중단 가능성을 낮추므로 네트워크 연결이 지속되는 조건에서 효과적입니다. 한 번에 여러 파일을 다운로드하거나 네트워크에서 다른 활동을 수행하는 경우에 유용합니다. 또한 --limit-rate는 다운로드에 제한이 있는 서버에 의해 차단될 가능성을 완화하는 데 도움이 됩니다. 프록시를 통해 다운로드가 수행되는 경우 이 매개변수는 부담을 줄이고 차단될 가능성을 최소화하는 데 도움이 됩니다. 이 명령은 데이터 양이 제한된 모바일 인터넷이나 요금제로 작업할 때 트래픽을 관리하는 데도 도움이 됩니다.

자동 다운로드

cURL에서는 기본적으로 다운로드 진행률이 속도와 함께 터미널 창에 표시됩니다. 이 기능은 일부 cURL 사용자에게 유용하지만 스크립트나 자동화된 프로세스의 경우 표시되지 않도록 설정할 수 있습니다. 이러한 경우 -s 또는 --silent 플래그를 활성화할 수 있습니다.

'자동' 모드에서 cURL 명령줄을 사용하여 파일을 다운로드하는 방법의 예시입니다:


curl -s -O https://example.com/file.zip

명령어에서 알 수 있듯이 모든 파일은 화면에 아무런 정보도 표시하지 않고 cURL로 다운로드됩니다. 오류만 표시하고 다른 모든 메시지를 음소거 상태로 설정해야 하는 경우 -S(--show-error)를 사용하여 앞서 언급한 인수와 결합할 수 있습니다:


curl -s -S -O https://example.com/file.zip

인증

일부 파일을 다운로드하고 일부 API를 사용하려면 인증이 필요합니다. cURL은 사용자 이름과 비밀번호 또는 액세스 토큰을 사용하는 인증 절차 등 다양한 인증 절차를 지원하는 아키텍처를 갖추고 있습니다.

액세스 시 사용자 아이디와 비밀번호가 필요한 경우 -u 플래그와 함께 단일 인수로 전송할 수 있습니다:


curl -u username:password -O https://example.com/protected-file.zip

비밀번호에 @, #, & 등과 같은 특수 구성 요소가 포함된 경우에는 따옴표 안에 비밀번호를 넣는 것이 좋습니다:


curl -u username:"your@password#123" -O https://example.com/protected-file.zip

사용자 아이디만 전송되는 경우 cURL은 비밀번호를 묻는 메시지를 표시합니다.

발급자 시스템에 인증하는 또 다른 방법은 액세스 토큰을 사용하여 수행할 수 있으며, 이 경우 토큰은 아래 그림과 같이 요청 헤더에 포함됩니다:


curl -H "Authorization: Bearer your_token_here" -O https://api.example.com/data.json

일부 서비스는 토큰을 URL에 직접 포함해야 할 수도 있습니다. 그러면 명령은 다음과 같이 표시됩니다:


curl -O https://api.example.com/data.json?access_token=your_token_here

어쨌든 URL에 토큰을 넣으면 사용자의 경로명이 브라우저 기록이나 서버 로그에 저장될 수 있기 때문에 문제가 될 수 있습니다.

이러한 인증 방법은 보호된 서버의 파일에서 데이터를 가져오거나 API에서 데이터를 요청하거나 회사 환경 내에서 데이터에 액세스해야 할 때 잘 작동합니다.

프록시를 통한 다운로드

프록시는 대부분의 프로토콜을 통한 데이터 전송을 지원하므로 원격 파일 액세스에 특히 유용하며 프록시는 원격 파일 액세스에 주로 사용됩니다.

프록시 설정은 -x(또는 -proxy)로 수행합니다.

명령의 일반적인 형식은 다음과 같습니다:


curl -x [scheme://]proxy-server[:port] -o output.file URL

예: HTTP 프록시를 통해 파일 다운로드:


curl -x http://proxy.testnet.com:80 -o file.zip https://example.com/archive.zip

위치:

  • -x http://proxy.testnet.com:80 - 는 필요한 HTTP 프록시와 사용할 포트를 지정합니다;
  • -o archive.zip - 은 저장할 파일 이름을 나타냅니다;
  • https://example.com/archive.zip - 다운로드 중인 파일의 위치입니다.

프록시 서버에 사용자 이름과 비밀번호가 필요한 경우 다음과 같이 사용할 수 있습니다:


curl -x http://proxy.example.com:80 -U user:password -o archive.zip https://example.com/archive.zip

다른 접근 방식 - URL을 통해 인증을 전달합니다:


curl -x http://user:password@proxy.example.com:80 -o archive.zip https://example.com/archive.zip

예를 들어 SOCKS5 또는 SOCKS4로 작업하려면 --proxy 매개 변수를 유형으로 설정합니다:


curl --proxy socks5h://proxy.example.com:1080 -o archive.zip https://example.com/archive.zip

중요한 뉘앙스:

  • socks5h:// - 를 사용하면 프록시를 통해 DNS 쿼리를 더 높은 익명성으로 전달할 수 있습니다;
  • socks5:// - 는 DNS 쿼리를 직접 전송합니다(덜 안전함).

프록시는 사용자가 방문하는 사이트에서 원래 IP 주소를 사용할 수 없으므로 익명성을 제공합니다. 또한 다른 국가에서 액세스하는 경우 특정 지역의 리소스에 대한 차단을 우회할 수 있습니다. 프록시를 사용하여 파일을 다운로드하면 기업 네트워크의 사용자는 공급자의 제한이나 데이터 캐싱으로 인해 폐쇄된 리소스에 액세스하고 로딩 속도를 개선할 수 있습니다.

진행 상황 추적

특히 대용량 파일의 경우, cURL을 사용하여 파일을 다운로드하는 과정을 적절히 감독하기 위해 경계를 늦추지 않는 것이 좋습니다. 이는 대화형 다운로드 표시줄과 같은 진행률 표시와 상세 정보를 포함하는 기본 제공 기능을 활용하여 수행할 수 있습니다.

또는 --progress-bar 플래그를 사용하면 기본 다운로드 비율 표시기를 움직이는 막대로 대체할 수 있습니다. 이 플래그는 시스템 성능을 보다 간결한 그래픽 형태로 측정해야 하는 경우에 유용합니다.


curl -# -o file.zip https://example.com/file.zip

채우기 표시기가 있는 막대가 왼쪽에서 오른쪽으로 이동합니다:

1.jpg

이 방법은 표시되는 정보의 양을 제한하여 작업을 추적하려는 경우 편리합니다.

다운로드되는 데이터의 속도, 시간, 양을 더 자세히 관찰하려면 -v 및 -w 옵션을 함께 사용할 수 있습니다.

  • v를 사용한 예(출력에 일부 세부 정보가 추가됨):
    
    curl -v -o file.zip https://example.com/file.zip
    
    
  • 다운로드가 완료된 후 주요 지표를 표시하려면 -w 로 특정 양식을 설정해야 합니다:
    
    curl -o file.zip -w "Download speed: %{speed_download} bits per second\n" https://example.com/file.zip
    
    

이를 통해 전체 프로세스 동안 다운로드 속도를 모니터링할 수 있습니다.

연결이 불안정한 경우 다운로드 속도를 면밀히 판단할 수 있습니다. 장애물이 있으면 프로세스 속도가 갑자기 떨어지거나 속도가 완전히 저하될 수 있습니다. 연결이 안정적이면 네트워크의 속도와 전반적인 성능을 모니터링할 수 있습니다.

요청/응답 정보

cURL 명령을 사용하면 연결 끊김, 비준 또는 오류 진단에 중요할 수 있는 HTTP 응답 코드 매개변수와 같은 문제를 식별하는 데 도움이 되는 다양한 정보를 검색할 수 있습니다. 이를 위해 확장 출력 모드를 켜는 -v 플래그가 사용됩니다.

예시:


curl -v -o file.zip https://example.com/archive.zip

명령이 실행되는 동안 출력은 다음과 같이 표시됩니다.

2.jpg

다음과 같은 주요 데이터를 확인할 수 있습니다:

  • 서버의 IP 주소와 연결 설정이 필요합니다;
  • 원본 HTTP 요청;
  • 서버의 응답 상태를 확인합니다;
  • 콘텐츠 유형, 날짜 및 일부 캐싱 매개변수를 포함하는 응답 헤더입니다.

서버 요청 및 응답의 세부 사항은 -v 플래그를 포함하여 cURL로 볼 수 있습니다. 이를 통해 클라이언트가 서버와 통신하는 방식에 대한 인사이트를 얻을 수 있습니다. 예를 들어 리디렉션의 경우 서버가 새 URL로 위치를 변경하면 "-v"는 "상태 301 영구적으로 이동됨" 또는 "302 발견됨" 명령의 사용을 나타냅니다.

또한 제한된 액세스 및 파일 부재를 나타내는 '403 금지됨' 또는 '404 찾을 수 없음'과 같은 오류를 확인하는 데에도 사용할 수 있습니다. 또한 응답 헤더를 확인하여 다운로드 프로세스 전에 다양한 파일 매개변수를 분석할 수도 있습니다.

cURL vs Wget

명령줄 인터페이스에서 파일을 다운로드하는 데 가장 많이 사용되는 두 가지 도구는 cURL과 Wget이며, 두 도구는 그 용도로 널리 사용되지만 기능면에서 차이가 있습니다.

또한, 이들 간의 주요 차이점을 살펴 보겠습니다.

기능 cURL Wget
병렬 다운로드 지원 추가 명령이 필요합니다. 내장
다운로드 자동 재개 -C - 플래그 필요 내장
API(POST, PUT 요청 및 헤더 전송)와 함께 작동합니다. 기본적으로 제한적
리디렉션 우회하기 L 플래그 사용 내장
프록시 지원 기본적으로 기본적으로
내장된 진행률 표시줄 필요 -# 플래그 부재중
백그라운드 작업 지원되지 않음 필요 -b 플래그
스크립트에 통합 예(응답 코드 반환) 제한적

Wget과 cURL은 명령 구문에도 차이가 있습니다:

  • 파일을 저장할 때는 -O, 다운로드를 계속할 때는 -C, 리디렉션을 따를 때는 -L을 설정하는 등 cURL에서 명령을 명시적으로 사용하는 동안 플래그를 표시해야 합니다. 파일에 저장하는 옵션을 지정하지 않으면 cURL의 기본값은 터미널 화면에 파일 내용을 인쇄하는 것입니다.
  • Wget에서 명령은 간단합니다. 추가 플래그를 지정하지 않아도 파일이 자동으로 다운로드되고 -c로 재개되며 리디렉션이 자동으로 수행됩니다.

Wget은 주로 파일 다운로드를 위해 만들어진 것으로 보이며, cURL은 HTTP 요청 및 API와 상호 작용하기 위해 만들어졌습니다.

지원 프로토콜 측면에서 Wget은 여러 측면에서 cURL에 비해 불리한 점이 있습니다.

curl-i-wget.png

결론

실제로 cURL은 다양한 프로토콜, 파일 명명 규칙, 프록시 사용, 중단된 다운로드 재개 기능 등을 지원한다는 점에서 높이 평가할 만합니다.

cURL은 단순한 다운로드를 API와 통합하거나 대규모 데이터 불러오기를 수행하는 데 적합합니다. 하지만 리디렉션, 속도 제한 설정, 인증, 서버 상호 작용 추적, 서버 연결 진단 및 웹 리소스 테스트가 가능하기 때문에 다목적 도구로 활용할 수 있습니다. 또한 제공되는 유연한 매개변수 사용자 지정 기능을 통해 모든 작업에 맞게 cURL을 맞춤 설정할 수 있습니다.

댓글:

0 댓글