본문 바로가기
[IT 관련 지식]/[Linux]

CURL

by 판톰 2014. 8. 21.
반응형

웹 서버에 대한 배치작업이 필요한 경우가 있다. 

이런 작업에 웹 브라우저를 사용할 수 없는 노릇이니 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