행위

Curl 사용법

DB CAFE

thumb_up 추천메뉴 바로가기


1 Curl[편집]

  • Curl 은?
curl은 명령줄이나 스크립트에서 데이터를 전송하는 데 사용됩니다. curl은 자동차, 텔레비전 세트, 라우터, 프린터, 오디오 장비, 휴대폰, 태블릿, 셋톱 박스, 미디어 플레이어에도 사용되며 100억 개가 넘는 설치에서 수천 개의 소프트웨어 애플리케이션을 위한 인터넷 전송 엔진입니다.
  1. HTTP, HTTPS, SCP , SFTP 및 FTP 등 지원
  2. curl은 전송을 재개하고 대역폭을 제한하며 프록시 지원, 사용자 인증 등을 수행할 수 있는 다양한 옵션 제공
  3. Download https://curl.se/download.html

2 Curl 설치[편집]

2.1 Ubuntu / Debian 설치[편집]

sudo apt update
sudo apt install curl

2.2 CentOS / Fedora 설치[편집]

sudo yum install curl

3 Curl 옵션 (파라미터)[편집]

curl [options] [URL...]

가장 간단한 형태로 옵션 없이 호출될 경우, Curl은 지정된 리소스를 표준 출력에 표시합니다.

예시)

curl example.com

3.1 기본 파라미터[편집]

$ curl --help
Usage: curl [options...] <url>
 -d, --data <data>          HTTP POST data
 -f, --fail                 Fail fast with no output on HTTP errors
 -h, --help <category>      Get help for commands
 -i, --include              Include protocol response headers in the output
 -o, --output <file>        Write to file instead of stdout
 -O, --remote-name          Write output to a file named as the remote file
 -s, --silent               Silent mode
 -T, --upload-file <file>   Transfer local FILE to destination
 -u, --user <user:password> Server user and password
 -A, --user-agent <name>    Send User-Agent <name> to server
 -v, --verbose              Make the operation more talkative
 -V, --version              Show version number and quit

3.2 출력을 파일에 저장[편집]

  • curl 명령의 결과를 저장하려면 -o 또는 -O 옵션을 사용합니다.
  • 소문자 -o 는 미리 정의된(Save As ..) 파일 이름을 사용하여 파일을 저장합니다. 아래 예에서는 vue-v2.6.10.js입니다.
curl -o vue-v2.6.10.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js

대문자 -O 는 파일을 원래 파일 이름으로 저장합니다.

curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js

여러 파일을 다운로드

  • 여러 파일을 한 번에 다운로드하려면 여러개 -O 옵션과 다운로드하려는 파일의 URL을 차례로 사용

다음 예에서는 Arch Linux 및 Debian ISO 파일을 다운로드합니다.

curl -O http://mirrors.edge.kernel.org/archlinux/iso/2018.06.01/archlinux-2018.06.01-x86_64.iso  \
     -O https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso

3.3 다운로드 재시작[편집]

  • -C - 옵션을 사용하여 다운로드를 재개할 수 있습니다.
  • 이 기능은 대용량 파일을 다운로드하는 동안 연결이 끊긴 경우 유용하며 처음부터 다운로드를 시작하는 대신 이전 파일을 계속할 수 있습니다.

예를 들어 다음 명령을 사용하여 Ubuntu 18.04 ISO 파일을 다운로드하는 경우입니다.

curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso

그리고 갑자기 연결이 끊기면 다음을 사용하여 다운로드를 재개할 수 있습니다.

curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso

3.4 URL POST 방식 사용하기[편집]

  • POST 요청 기본
curl -X POST [options] [URL]
  1. -X 옵션은 원격 서버와 통신할 때 사용할 HTTP 요청 방법 지정
  2. 요청 본문의 유형은 Content-Type 헤더로 표시
    1. 일반적으로 POST 요청은 HTML/Form 양식을 통해 전송됩니다.
    2. 일반적으로 다중 파트/양식 데이터 또는 응용 프로그램/x-www-form-urlencoded 콘텐츠 유형으로 인코딩
  3. POST 요청을 만들려면 -F 옵션과 field=값 쌍을 차례로 사용
  4. 다음은 "id" 및 "password" 필드가 있는 양식에 POST 요청을 하는 예시
curl -X POST -F 'id=cykim' -F 'password=elqlzkvp' https://dbcafe.co.kr/index.php
  • POST -F 옵션
  1. -F 옵션을 사용하면 컬이 멀티파트/폼 데이터 Content-Type을 사용하여 데이터를 전송
  2. POST 요청을 하는 또 다른 방법은 -d 옵션을 사용하는 것입니다.
  3. 그러면 CURL 이 응용 프로그램/x-www-form-urlencoded Content-Type을 사용하여 데이터를 전송합니다.
curl -X POST -d 'id=cykim' -d 'passwd=elqlzkvp' https://dbcafe.co.kr/index.php
    • -d 옵션을 두 번 이상 사용하는 경우 & 기호를 사용하여 데이터를 병합할 수 있습니다.
      curl -X POST -d 'id=cykim&passwd=elqlvkzp' https://dbcafe.co.kr/index.php
  • Content-Type을 지정
  1. 특정 헤더 또는 Content-Type을 설정하려면 -H 옵션
    다음 명령은 POST 요청 유형을 application/json으로 설정하고 JSON 개체를 전송합니다.
    curl -X POST -H "Content-Type: application/json" \

-d '{"name": "linuxize", "email": "linuxize@example.com"}' \ https://example/contact

  • 파일을 업로드
  1. curl이 있는 파일을 POST하려면 파일 위치 앞에 @ 기호를 추가합니다.
  2. 파일은 아카이브, 이미지, 문서 등이 될 수 있습니다.
    curl -X POST -F 'image=@/home/user/Pictures/wallpaper.jpg' http://example.com/upload

3.5 URL의 HTTP 헤더 가져오기[편집]

  • HTTP 헤더는 사용자 에이전트, 내용 유형 및 인코딩과 같은 정보를 포함하는 콜론 구분 키 값 쌍입니다.
  • 헤더는 요청 또는 응답과 함께 클라이언트와 서버 간에 전달됩니다.

-I 옵션을 사용하여 지정된 리소스의 HTTP 헤더만 가져옵니다.

curl -I --http2 https://www.ubuntu.com/
3.5.1 웹 사이트가 HTTP/2를 지원하는지 테스트[편집]
  • 특정 URL이 새 HTTP/2 프로토콜을 지원하는지 확인하려면 -I와 함께 HTTP 헤더를 --http2 옵션과 함께 가져옵니다.
curl -I --http2 -s https://linuxize.com/ | grep HTTP

-s 옵션은 curl을 무음(조용)으로 실행하고 진행률 미터와 오류 메시지를 숨깁니다.

원격 서버가 HTTP/2를 지원하는 경우, curl은 HTTP/2.0 200을 인쇄합니다.

HTTP/2 200

그렇지 않으면 응답은 HTTP/1.1 200입니다.

HTTP/1.1 200 OK

Curl버전 7.47.0 이상이 있는 경우 HTTP/2는 기본적으로 모든 HTTPS 연결에 대해 사용 가능하므로 --http2 옵션을 사용할 필요가 없습니다.

3.6 리디렉션을 따르기[편집]

  • 기본적으로 컬은 HTTP 위치 머리글을 따르지 않습니다.

google.com의 non-ww 버전을 검색하려고 하면 페이지의 원본을 가져오는 대신 www 버전으로 리디렉션됩니다.

curl google.com

-L 옵션은 컬이 최종 대상에 도달할 때까지 모든 리디렉션을 따르도록 지시합니다.

curl -L google.com

3.7 사용자 에이전트 변경[편집]

  • 경우에 따라 파일을 다운로드할 때 방문자 장치 및 브라우저에 따라 사용자 에이전트 컬을 차단하거나 다른 내용을 반환하도록 원격 서버를 설정할 수 있습니다.
  • 이런 경우 다른 브라우저를 에뮬레이트하려면 -A 옵션을 사용합니다.

예를 들어 Firefox 60을 에뮬레이트하는 경우 다음을 사용합니다.

curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" https://getfedora.org/

3.8 최대 전송 속도 지정[편집]

  • --limit-rate 옵션을 사용하면 데이터 전송 속도를 제한할 수 있습니다.
  • 값은 바이트, k 접미사로 킬로바이트, m 접미사로 메가바이트, g 접미사로 기가바이트로 표현할 수 있습니다.

다음 예제에서는 이동 바이너리를 다운로드하고 다운로드 속도를 1MB로 제한합니다.

curl --limit-rate 1m -O https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

이 옵션은 컬이 사용 가능한 모든 대역폭을 소비하는 것을 방지하는 데 유용합니다.

3.9 FTP로 파일 전송[편집]

  • curl로 보호된 FTP 서버에 액세스하려면 -u 옵션을 사용하고 아래 그림과 같이 사용자 이름과 암호를 지정합니다.
curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/

로그인하면 사용자의 홈 디렉토리에 있는 모든 파일과 디렉터리가 나열됩니다.

다음 구문을 사용하여 FTP 서버에서 단일 파일을 다운로드할 수 있습니다.

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/file.tar.gz

파일을 FTP 서버에 업로드하려면 업로드할 파일 이름 뒤에 -T를 사용합니다.

curl -T newfile.tar.gz -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/

3.10 쿠키 보내기[편집]

  • 원격 리소스에 액세스하거나 문제를 디버깅하기 위해 특정 쿠키를 사용하여 HTTP 요청을 해야 하는 경우
  • 기본적으로 Curl이 있는 리소스를 요청할 때 쿠키는 전송되거나 저장되지 않습니다.
  • 서버로 쿠키를 보내려면 -b 스위치 다음에 쿠키 또는 문자열이 들어 있는 파일 이름을 사용합니다.

예를 들어 Oracle Java JDK rpm 파일 jdk-10.0.2_192-x64_bin.rpm을 다운로드합니다. 값을 가진 oracle license라는 쿠키를 전달해야 합니다.

curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.rpm

3.11 프록시 사용[편집]

  • HTTP, HTTPS 및 SOCKS를 비롯한 다양한 유형의 프록시 지원
  • 프록시 서버를 통해 데이터를 전송하려면 -x(--proxy) 옵션을 선택한 다음 프록시 URL을 사용합니다.

다음 명령은 192.168.44.1 포트 8888에서 프록시를 사용하여 지정된 리소스를 다운로드합니다.

curl -x 192.168.44.1:8888 http://linux.com/

프록시 서버에 인증이 필요한 경우 -U(--proxy-user) 옵션을 사용하고 사용자 이름과 암호를 콜론(user:password)으로 구분합니다.

curl -U username:password -x 192.168.44.1:8888 http://linux.com/

3.12 파일이용 로그인[편집]

curl --netrc-file ~/.netrc https://example.com
-- .netrc 파일정보
machine example.com login bob password passd

3.13 그외[편집]

    응답에서 포맷에 맞는 데이터를 출력할 수 있다. 
    %{variable_name} 과 같은 식으로 출력할 수 있다.


    content_type, http_code, time_total 등의 정보를 출력할 수 있다.





기타


-x, —proxy <url:port>

    HTTP 요청을 보낼 때, 프록시를 사용한다.


    curl -x http://localhost:8888 http://naver.com


-p, —proxytunnel

    -x 파라미터와 함께 사용되며, HTTP 요청이 아닌 것을 HTTP 요청으로 보낸다.


-s, —slient

    프로그레스나 에러 정보를 보여주지 않는다.


—retry <num>

—retry-delay <seconds>

    요청 실패 시 재시도 한다.


-L, —location

    서버 응답이 3XX로 와서 페이지가 이동된 걸로 판단된 경우,
    해당 페이지로 다시 요청을 보낸다.


-D, —dump-header <file name>

    응답 헤더를 특정 파일에 저장할 수 있다.
    헤더에서 쿠키 등을 저장했다가 다음 요청에 쓰는 용도로 활용할 수 있다. (-b, —cookie 옵션)
    다만, 쿠키를 저장해서 활용하는 용도라면 이것보단 -c, —cookie-jar 옵션이 더 유용하다.


-c, —cookie-jar <filename>

    요청이 완료된 후 쿠키를 모두 저장한다.
    저장한 쿠키는 -b, —cookie 옵션으로 사용할 수 있다.