[window] window에서 curl 사용하기
그냥 curl 은 윈도우에서 먹는다. 대신 옵션 설정 (ex. -X -H )등을 먹일라면 curl 용 을 다운받던지, git bash 사용하자
--------------------------------------------------------------------------------------------------------------------------
curl은 command URL로 일반적인 웹브라우저가 GUI을 제공하는데 반해
curl은 명령어(command)를 통해 데이터를 송수신할 수 있도록 해주는 툴이며, CUI(Command User Interface) 형태의 웹브라우저라 해도 무방할 것이다.
또한 curl은 공개 소프트웨어로 배포되고 있으며 윈도우, 리눅스, 맥 OS X 등을 포함한 다양한 운영체제를 지원하고 있다.
기본적인 설치 및 사용 방법
curl은 https://curl.haxx.se/download.html 에서 운영체제별로 다운로드 할 수 있다.
여기서는 윈도우 64비트 기준으로 작성하도록 하겠다.
먼저 Win64 - Generic 항목에서 Win64 x86_64 7zip 에 해당하는 파일을 다운로드 받는다.
다운로드를 다 받은 후 파일("curl_7_50_0_openssl_nghttp2_x64.7z")을 열게되면 아래 그림과 같이 curl.exe 실행 파일이 보이게 된다.
원하는 경로에 압축을 해제한 후 curl을 윈도우 명령프롬프트창에서 실행해보도록 하자.
1) 명령프롬프트 실행.
윈도우 시작메뉴 > 모든 프로그램 > 보조프로그램 > 명령 프롬프트
또는 윈도우키 + "R" 누른 후 실행창이 나오면 "cmd" 입력
[그림] 윈도우 명령 실행창
2) curl.exe 있는 경로로 이동 후 아래와 같이 명령어 실행 후 실행 결과 확인.
curl http://javaking75.blog.me/
[그림] curl 실행 결과, 요청한 페이지의 응답 결과가 보이게 된다.
curl은 HTTP, FTP, LDAP등 다양한 프로토콜을 지원하며 curl을 이용하면 이러한 프로토콜을 사용할 때 데이터의 흐름을 확인 해 볼 수 있다.
다음 표는 curl에서 사용할 수 있는 옵션 들 중 일부이다. curl -h 명령어를 실행하면 더 많은 옵션들을 확인 할 수 있다.
[표] curl 옵션
옵션 |
설명 |
|
-a |
--append |
업로드시 대상 파일에 추가 |
-E |
--cert |
클라이언트 인증 파일 및 비밀 번호(SSL) 지정 |
-K |
--config |
설정 파일 지정 |
-C |
--continue-at |
지정된 오프셋부터 전송 재개 |
-b |
--cookie |
쿠키 문자열 또는 쿠키 파일 지정 |
-c |
--cookie-jar |
동작 후 지정된 파일에 쿠키 기록 |
-d |
--data |
HTTP POST 데이터 |
-D |
--dump-header |
파일에 헤더 내용 기록 |
-f |
--fail |
HTTP 에러 발생시 표준 입출력으로 출력하지 않음 |
-F |
--form |
HTTP 다중 POST 데이터 지정 |
-P |
--ftp-port |
PASV대신 포트를 어드레스로 사용 |
-G |
--get |
데이터를 GET 방식으로 전송 |
-g |
--globoff |
{ }와 [ ]를 사용하여 URL 순서와 범위를 비활성화 |
-H |
--header |
사용자 정의 헤더를 지정 |
-I |
--head |
문서 정보를 출력 |
-h |
--help |
텍스트 도움말 출력 |
-0 |
--http1.0 |
HTTP 1.0 사용 |
-i |
--include |
출력에서 프로토콜 헤더를 포함 |
-k |
--insecure |
certs 없이 SSL 사이트 연결을 허용 |
-4 |
--ipv4 |
IPv4 주소 이름 해석 |
-6 |
--ipv6 |
IPv6 주소 이름 해석 |
-j |
--junk-session-cookies |
파일로부터 읽어 들인 세션 쿠키 무시 |
-l |
--list-only |
FTP 디렉토리 이름만 열러 |
-L |
--location |
요청된 페이지 위치가 변경된 경우 새로운 위치로 요청 |
-M |
--manual |
모든 사용 방법 출력 |
-m |
--max-time |
전송에 허용된 최대 시간 설정 |
-n |
--netrc |
사용자 계정과 비밀 번호를 .netrc로 읽어들임 |
-N |
--no-buffer |
출력 스트림의 버퍼링 비활성화 |
-o |
--output |
표준 출력대신 파일로 출력 |
-# |
--progress-bar |
전송 상태에 대한 진행 상태 표시 |
-x |
--proxy |
주어진 포트에 대한 HTTP 프록시 사용 |
-U |
--proxy-user |
프록시 사용자 계정 및 비밀번호 설정 |
-p |
--proxytunnel |
HTTP 프록시 터널을 통한 운영 |
-Q |
--quote |
파일 전송 이전에 서버로 명령어 전송 |
-r |
--range |
범위에 있는 바이트 검색 |
-e |
--referer |
레퍼러 URL 지정 |
-O |
--remote-name |
출력 파일을 원격 파일 이름으로 지정 |
-R |
--remote-time |
로컬 출력 파일의 시간을 원격 파일의 시간으로 설정 |
-X |
--request |
사용할 요청 명령을 지정 |
-S |
--show-error |
에러를 표시 |
-s |
--silent |
아무런 출력을 표시 하지 않음 |
-Y |
--speed-limit |
지정된 전송 속도보다 느린 경우 전송 중단 |
-y |
--speed-time |
지정된 시간보다 느린 경우 전송 중단 |
-2 |
--sslv2 |
SSLv2를 사용 |
-3 |
--sslv3 |
SSLv3를 사용 |
-t |
--telnet-option |
telnet 옵션 지정 |
-z |
--time-cond |
시간 조건에 따른 전송 |
-1 |
--tlsv1 |
TLSv1(SSL) 사용 |
-T |
--upload-file |
지정된 파일을 원격 사이트에 전송 |
-B |
--use-ascii |
ASCII/텍스트 전송 사용 |
-u |
--user |
서버의 사용자 및 비밀번호 지정 |
-A |
--user-agent |
서버로 전송되는 User-Agent 정보 |
-v |
--verbose |
verbose모드로 설정(디버깅시 활용) |
-V |
--version |
버전 정보 출력 |
-w |
--write-out |
종료 후 출력된 정보 설정 |
예)
#요처보내기
curl http://javaking75.blog.me
#HTTP 헤더 포함하여 출력하기
curl -i http://javaking75.blog.me
#HTTP 헤더만 출력하기
curl -I http://javaking75.blog.me
#요청 헤더 지정하기
curl -H 'Host:ko.example.com' http://javaking75.blog.me
#User-Agent 헤더를 지정
curl -A 'MyApp' http://javaking75.blog.me
#POST 방식으로 요청 (요청 바디를 사용해 전송할 내용 지정)
curl -X POST http://javaking75.blog.me -d id=javaking75&menu_id=0001
curl -X POST http://javaking75.blog.me -d id=javaking75 -d menu_id=0001
# Json 형태 문자열 전송
curl -H 'Content-Type: application/json' -X POST http://javaking75.blog.me -d '{ "id": "javaking75"}'
# 파일에 저장된 내용 전송
curl -H 'Content-Type: application/json' -X POST http://javaking75.blog.me -d @test.json
# 프록시 사용하기
curl -x 127.0.0.1:8080 -X GET http://javaking75.blog.me
# 출력결과를 파일로 저장하기
curl http://javaking75.blog.me > index.html