웹 서버에 대한 배치작업이 필요한 경우가 있다.
이런 작업에 웹 브라우저를 사용할 수 없는 노릇이니 CLI 도구를 사용해야 한다.
curl은 가장 널리 사용하는 인터넷 데이터 전송을 위한 도구다.
명령행 기반 웹 요청 도구. 특히 REST 애플리케이션을 개발 테스트시에 유용하게 사용할 수 있다.
홈페이지 : http://curl.haxx.se/
cURL Tutorial
GUI 기반으로 REST 애플리케이션 테스트 해보고자 한다면 http://rest-client.googlecode.com/
CURL 예제
프로토콜 디버깅
--verbose와 --trace, --trace-ascii를 이용해서 HTTP 데이터 통신 과정에 대한 상세정보를 얻을 수 있다. --verbose로 불충분하다면 --trace-ascii를 사용하자.
# curl --trace-ascii debug.dump http://www.test.co.kr/testpage
디버깅 정보는 debug.dump에 저장된다.
[편집]
GET
데이터 요청을 위한 가장간단한 방법이다. URL만 명시하는 것으로 테스트 할 수 있다.
curl -v 기타 옵션 : 디버깅을 위해 요청과 응답 헤더까지 모두 표시
curl http://www.xxx.com : 일반 GET 요청
-I : 헤더만 가져오기
-i : 헤더와 바디까지 가져오기
# curl http://www.joinc.co.kr # curl http://www.joinc.co.kr?action=del&id=12345
POST
GET 방식은 URL만으로 정보를 보낼 수 있지만, POST 방식의 경우 메시지를 body에 담아서 보내야 한다.
-d, --data 옵션을 이용해서 데이터를 보낼 수 있다.
혹은 파일의 내용을 POST 데이터로 보낼 수도 있다.
URL 인코딩된 파라미터를 앞에 쓰고, 그 뒤에 POST를 처리하는 주소를 넣는다.
파라미터는 무조건 먼저 인코딩 된 상태여야 한다.
POST의 Content-Type 은 application/x-www-form-urlencoded 이다.
# curl -d "name=yundream&age=19&address=Seoul ... ..." http://www.joinc.co.kr/curltest.php # curl -X POST http://192.168.57.3:5984/mywiki/ -d @curl.json -H "Content-Type: application/json"
파일 업로드
# curl -F upload=@dump.tar.gz -F "username=yundream" http://www.joinc.co.kr/curltest.php
-F 폼필드명=@파일명
-F 폼필드명=폼필드값
Content-Type 은 multipart/form-data
User Agent
반응형 웹 페이지를 만들 경우 user-agent에 따른 테스트가 필요하다. --user-agent 옵션을 이용해서 user agent 값을 변경할 수 있다.
# curl --user-agent "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" http://www.joinc.co.kr
HTTP Header dump
"-D(--dump-header) <filename>"로 헤더 정보를 파일로 보낼 수 있다. filename을 "-"로 하면 헤더를 표준출력할 수 있다.
# curl -D header.txt http://www.joinc.co.kr # cat header.txt HTTP/1.1 200 OK Date: Thu, 04 Jul 2013 01:54:40 GMT Server: Apache/2.2.14 (Ubuntu) Last-Modified: Fri, 22 Jun 2012 06:58:22 GMT ETag: "c43e-76-4c30a286a7f80" Accept-Ranges: bytes Content-Length: 118 Vary: Accept-Encoding Content-Type: text/html
PUT
curl -T 업로드할파일명 www.uploadhttp.com/receive.cgi
DELETE
curl -X DELETE www.data.com/resources/223
-X 는 요청을 보내는 method를 직접 지정해주는 옵션이다.
Authentication
Basic Auth : curl -u username:password www.secrets.com
간단한 Tomcat 컨텍스트 리로드 스크립트
curl -u TomcatAdmin계정:비밀번호 localhost:8080/manager/html/reload?path=/
서버의 인증 방식에 따라 다음 옵션 가능
--ntlm
--digest
--negotiate
--anyauth
프록시 인증 : curl -U proxyuser:proxypassword curl.haxx.se
--proxy-ntlm
--proxy-digest
Referer 지정
curl -e http://리퍼러주소 daniel.haxx.se
Redirect
curl -L www.somesite.com
curl은 기본적으로 Redirect Header를 무시한다.
-L 을 붙이면 redirect 요청을 따라서 다음 페이지로 간다.
-d/-F 옵션을 통해 POST/PUT 요청등을 보내고 나서 redirect가 실행된다면 첫번째 요청은 POST/PUT으로 처리하고, 리다이렉트는 GET으로 처리한다.
Cookies
curl -b "name=Daniel" www.cookiesite.com
Cookie key=value 쌍을 서버로 전송한다.
curl -D headers_and_cookies www.cookiesite.com
headers_and_cookies 파일로 헤더 정보다 모두 저장된다. 헤더 정보에는 쿠키 정보도 포함되어 있다.
curl -b stored_cookies www.cookiesite.com
stored_cookies 파일에 저장된 쿠키 정보를 서버로 전송한다.
curl -b 존재하지않는파일명 -L www.cookiesite.com
서버에서 전송한 쿠키를 리다이렉트하면서 서버측에 재전송한다.
curl -b cookies.txt -c newcookies.txt www.cookiesite.com
-b cookies.txt 는 이미 존재하는 쿠키 파일(Mozilla 호환)을 읽어서 서버에 전송하는 것이고,
-c newcookies.txt 는 새로 새성된 쿠키를 파일로 저장하는 것이다.
기타 파라미터
-X 메쏘드
-X 뒤에 지정된 메소드 GET/POST/PUT/DELETE/HEAD/PROPFIND 등으로 요청을 수행한다.
-H "Content-Type: text/xml"
헤더 값을 지정한다.
-H "Host:"
헤더 값을 삭제한다.
참고
'[IT 관련 지식] > [Linux]' 카테고리의 다른 글
우분투 윈도우 프로그램 실행 (0) | 2014.09.09 |
---|---|
리눅스 타임라인 (0) | 2014.09.04 |
Alias 란 (0) | 2014.08.18 |
우분투 14.04 크롬 adobe flash player 문제 해결 (0) | 2014.08.17 |
파티션 검사 및 복구 (0) | 2014.08.17 |