cURL이란?
개발자들이 모두 사랑하는 프로그램들이 몇 있다. 개인적으로 cURL도 그 중 하나가 아닐까 생각한다. 어떤 개발자는 대화할 때, ping 처럼 운영체제에 기본으로 포함된 명령어 마냥 말을 해서 헷갈리게 하기도 한다. cURL도 그 중 하나가 아닌가 싶다.
위키피디아에 따르면, cURL은 다양한 프로토콜로 데이터를 전송해볼 수 있는 명령어 기반의 컴퓨터 프로그램이다. 1997년 부터 시작된 프로젝트로 현재 libcurl과 cURL 2개의 제품을 배포한다. libcurl은 일반 개발자가 많이 쓰는 HTTP, FTP를 시작해 매우 많은 프로토콜을 지원하는 무료 라이브러리다.
언제 쓸 수 있을까?
url을 가지고 할 수 있는 것들은 다할 수 있다.
예를 들면, http 프로토콜을 이용해 웹 페이지의 소스를 가져온다거나 파일을 다운받을 수 있다. ftp 프로토콜을 이용해서는 파일을 받을 수 있을 뿐 아니라 올릴 수도 있다. 심지어 SMTP 프로토콜을 이용하면 메일도 보낼 수 있다 🙂
어떻게 쓸 수 있나?
사용법은 간단하다. url의 소스코드를 보고 싶다면
>curl http://m.daum.net/
라고 입력한다. 곧, 소스가 STDOUT(보통은 화면)으로 출력된다.
파일을 다운로드 하고 싶다면 -O 옵션을 사용한다.
>curl -O http://sunphiz.me/file.zip
보통 http 프로토콜은 모두 브라우저로 연결된다. 만약 브라우저가 정상적으로 동작하지 않는다면 사용이 어려운데 cURL을 사용하면 http 프로토콜을 통해 파일을 받을 수 있다.
요즘 http 프로토콜 기반의 api가 많은데 이를 확인할 때에도 좋다. -i나 -I 옵션을 사용하면 헤더값을 확인할 수 있는데, 왠만한 RESTful client들 보다 잘 보인다.
>curl -I http://m.daum.net
request와 response가 어떻게 오고 갔는지 보려면 -v(verbose) 옵션을 쓸 수도 있다.
>curl -v http://m.daum.net
프록시를 통해 데이터를 통신하도록 할 수도 있다. -x 옵션 다음에 프록시 서버의 주소와 포트를 이어서 써주면 된다.
>curl -x 1.2.3.4:8080 http://m.daum.net/
개인적으로는 api를 체크할 때 매우 유용해보이며, 그 어떤 RESTful client 보다 훌륭한 가독성을 제공하는 것 같다. 아래와 같은 파라미터를 모두 포함하면, POST MAN 같은 RESTful 클라이언트를 대체할 수도 있다.
- -x : 프록시 서버
- -v : 상세 데이터 표시(헤더, 바디)
- -d : 바디 데이터
- -H : 헤더 설정
마지막으로 조금 복잡한 예제를 보자.
curl -x "1.2.6.2:8080" -v -d "{"person":{'age':13, 'sex':'female', 'tel':'111-222-3333'}}" -H "Host: stg.sunphiz.me" -H "Content-Type: text/plain" http://1.1.1.1/api/
그 밖에
- 맥에는 curl이 커맨드라인 툴로 기본 설치되어 있다. 더 자세한 내용은 맥의 도움말을 참조하자.
- Chrome(혹은 Chromium) 브라우저의 개발자 도구 > 네트워크 탭에 HTTP의 request/response를 볼수 있다. 각 HTTP 호출의 오른쪽 버튼을 누르면 Copy as cURL이라는 명령어를 통해 cURL로 호출할 수 있는 명령어를 만들어 준다.
참조
- http://curl.haxx.se/
- http://www.thegeekstuff.com/2012/04/curl-examples/
- http://shonm.tistory.com/category/%EB%A6%AC%EB%88%85%EC%8A%A4/curl%20%EC%82%AC%EC%9A%A9%EB%B2%95