$ curl [-option] URI
$ curl URI
를 사용하면, client의 요청에 대한, option | description |
---|---|
-k, --insecure | https 사이트를 SSL certificate 검증없이 연결한다. wget 의 --no-check-certificate 과 비슷한 역할 수행 |
-l, --head | 서버의 응답을 HTTP header 만 보여주고 content 는 표시하지 않는다. 단, 결과를 html 로 보여준다. |
-D, --dump-header <file> | <file> 에 HTTP header 를 기록한다. |
-L, --location | 서버에서 HTTP 301 이나 HTTP 302 응답이 왔을 경우 redirection URL 로 따라간다. 예를 들어 $ curl -i daum.net 을 입력하면 아래와 같이
|
--max-redirs | 뒤에 숫자로 redirection 을 몇 번 따라갈지 지정할 수 있다. 기본 값은 50이다 |
-v --verbose | 동작하면서 자세한 옵션 출력 |
-d --data | HTTP Post data FORM 을 POST 하는 HTTP나 JSON 으로 데이타를 주고받는 REST 기반의 웹서비스 디버깅시 유용한 옵션이다 |
-J --remote-header-name | 어떤 웹서비스는 파일 다운로드시 Content-Disposition Header 를 파싱해야 정확한 파일이름을 알 수 있을 경우가 있다. -J 옵션을 주면 헤더에 있는 파일 이름으로 저장한다. curl 7.20 이상부터 추가된 옵션 |
-o --output FILE | curl 은 remote 에서 받아온 데이타를 기본적으로는 콘솔에 출력한다. -o 옵션 뒤에 FILE 을 적어주면 해당 FILE 로 저장한다. (download 시 유용) |
-O --remote-name | file 저장시 remote 의 file 이름으로 저장한다. -o 옵션보다 편리하다. |
-s --silent | 정숙 모드. 진행 내역이나 메시지등을 출력하지 않는다. -o 옵션으로 remote data 도 /dev/null 로 보내면 결과물도 출력되지 않는다. HTTP response code 만 가져오거나 할 경우 유리 |
-I URI | 서버의 응답을 HTTP header 만 보여주고 content 는 표시하지 않는다. |
--max-time <sec> | <sec> 단위로 응답 타임아웃을 설정한다.서버에 요청을 보냈는데, block되는 경우 막을 수 있다. |
-l, --list-only | curl 로 listing 만함 |
$ curl <http(s) url>
$ curl https://www.naver.com
<strong class="title elss">[시승기]따뜻한 봄날을 기다리는 19년만의 현대자동차 SUV 경차 '캐스퍼'</strong>
<p class="desc">국내자동차시장이 커지면서 다양한 종류의 모델이 생산되고 있지만, 점점 생산량이 줄어들고 있는 세그먼트가 있다. 바로 경차 시장인 A세그먼트 모델들이다. 국내 자동차 시장에서 SUV의 인기가 높아지면서, 가장 큰 영향력을 받은 모델도 아마 경차모델이 아닐까??이런 분위기 속에 경차가 나왔다. 아니 경형 SUV가 출시하고 큰 관심을 모으고 있다.과거 '티코'
... 중략
$ curl -o <FILE_NAME> <URL>
$ curl -O <URL>
-L -o
$ curl -L <Download URL> -o <File Name> # Curl을 이용한 다운로드
$ md5sum <File Name> # 다운로드 파일 md5 checksum 확인
$ curl -L https://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img -o cirros-0.4.0-x86_64-disk.img
4-1. 다운로드 받은 파일의 md5sum 확인
$ md5sum cirros-0.4.0-x86_64-disk.img
443b7623e27ecf03dc9e01ee93f67afe cirros-0.4.0-x86_64-disk.img
4-2. 사이트에서와 일치하는 지 확인
-LO
: output file 자동$ curl -LO [URL] -> 마지막 파일명으로 다운로드됨
$ curl -LO https://github.com/sharkdp/diskus/releases/download/v0.6.0/diskus_0.6.0_amd64.deb
diskus_0.6.0_amd64.deb 되어 있음
-C
: 이어 받기-C/--continue-at <offset>
을 주면 이어받기가 가능하다.<offset>
에 '-'를 주면 전송 이후 부분부터 이어받는다.$ curl -C - -LO <URL>
curl
로 접속 확인$ curl -I IP:PORT
$ curl -I 192.168.9.1:11500
HTTP/1.1 200 OK
Date: Tue, 30 Nov 2021 04:47:49 GMT
Server: Apache/2.4.29 (Ubuntu)
Content-Type: text/html;charset=UTF-8
$ curl -I 개인서버/downloads
HTTP/1.1 301 Moved Permanently
Date: Tue, 30 Nov 2021 04:47:56 GMT
Server: Apache/2.4.29 (Ubuntu)
Location: http://개인서버/downloads
Content-Type: text/html; charset=iso-8859-1
$ echo $?
0
301 Moved Permanently
HTTP 응답 상태 코드 301 Moved Permanently는 영구적인 URL 리다이렉션을 위해 사용되며, 즉 응답을 수신하는 URL을 사용하는 현재의 링크나 레코드가 업데이트되어야 함을 의미한다. 이 새 URL은 응답에 포함된 위치 필드에 지정되어야 한다. 301 리다이렉트는 사용자가 HTTP를 HTTPS로 업그레이드하게 만드는 최상의 방법으로 간주된다.
RFC 2616은 다음과 같이 언급한다:[2]
클라이언트가 링크 편집 기능이 있으면 요청 URL에 대한 모든 참조를 업데이트해야 한다.
특별한 표시가 없으면 응답은 캐시가 가능할 것.
요청 메소드가 HEAD가 아닌 경우 엔티티는 새로운 URL로 향하는 하이퍼링크와 함께 크기가 작은 하이퍼텍스트 참고사항을 포함해야 한다.
GET이나 HEAD 외의 요청에 대해 301 상태 코드를 수신할 경우 클라이언트는 리다이렉트 전에 사용자에게 물어보아야 한다.wiki
[클라이언트 요청]
GET /index.php HTTP/1.1
Host: www.example.org
[서버 응답]
HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/index.asp
www.naver.com/downloads/
인데, curl -I www.naver.com/downloads
만 명시한 경우--max-time <sec>
: 타임아웃 걸기28: Connection timed out
에러를 출력한다.$ curl --max-time 5 192.168.0.1
curl: (28) Connection timed out after 5001 milliseconds
$ echo ?
28
➜ ~ curl -I 개인서버/틀린주소
HTTP/1.1 404 Not Found
Date: Tue, 30 Nov 2021 04:52:28 GMT
Server: Apache/2.4.29 (Ubuntu)
Content-Type: text/html; charset=iso-8859-1
$ echo $?
0
➜ ~ curl -I 개인서버:틀린포트
curl: (7) Failed to connect to 개인서버 port 틀린포트: Connection refused
echo $?
7
curl -sL "$server" --list-only | sed -n 's%.*href="\([^.]*\.rdf\.gz\)".*%\n\1%; ta; b; :a; s%.*\n%%; p'
citations.rdf.gz
databases.rdf.gz
diseases.rdf.gz
enzyme.rdf.gz
go.rdf.gz
journals.rdf.gz
keywords.rdf.gz
locations.rdf.gz
pathways.rdf.gz
taxonomy.rdf.gz
tissues.rdf.gz
uniparc.rdf.gz
uniprot.rdf.gz
uniref.rdf.gz
#!/bin/bash
site="http://server/all"
curl -sL ${site} | awk -F '<a |</a>' '{print$2}' | egrep "^href=" | awk -F '>' '{print$NF}'" | \
xargs -i -P 1 -n 1 bash -c "curl -sLO ${site}{}"