curl 은 커맨드 라인에서 동작하는 데이타 송수신 툴로 HTTP와 HTTPS 를 지원하므로 간단하게 HTTP 기반의 서비스를 테스트하는 용도로 사용할 수 있습니다.

브라우저 기반으로 동작하며 웹 사이트가 사용하는 기술을 자세히 표시해 주는 https://wappalyzer.com/ 같은 훌륭한 플러그인도 있지만 간단하게 웹 서비스의 HTTP 헤더 응답 값등을 조사할 필요가 있을때 curl 은 가볍고 빠르고 모든 리눅스에 기본 탑재되어 있으므로 유용하게 사용할 수 있습니다.


그럼 curl 의 기본 사용법에 대해서 알아봅시다.


사용법

curl [options...] <url> 형식으로 사용하면 되며 옵션을 주어서 동작 방식을 제어할 수 있습니다.


옵션은 GNU getopt 기능을 사용하므로 하이픈 하나를 붙이는 짧은 형식의 옵션과 하이픈 두개로 시작되는 긴 형식의 옵션이 있으며 우리가 사용할 주요 옵션은 아래와 같습니다.

short

long

설명

비고

-k--insecurehttps 사이트를 SSL 인증서 검증없이 연결합니다.wget 의 --no-check-certificate 과 동일한 역할 수행
-l (대문자 i)--headHTTP HEAD 요청을 전송하여 header 응답을 표시합니다. -i(소문자) 옵션을 사용하면 GET 요청을 전송하고 응답 헤더를 같이 표시합니다.
-L--location서버에서 HTTP 301이나 302 redirection 응답이 왔을 경우 redirection URL 을 따라갑니다.


-u--username인증이 필요한 사이트일 경우 사용하는 id와 암호를 : 를 구분자로 설정해 주면 됩니다.curl -u userid:mypassword http://example.com
-d--dataHTTP Post data

FORM 을 POST 하는 HTTP나 JSON 으로 데이타를 주고받는 REST 기반의

웹서비스 디버깅시 유용한 옵션

-H--header설정해야 할 헤더가 있을 경우 -H 옵션뒤에 "name: value" 형식으로 헤더를 지정합니다.
-v--verbose 동작하면서 자세한 옵션을 출력합니다.
-s--silent정숙 모드. 진행 내역이나 메시지등을 출력하지 않습니다.HTTP response code 만 가져오거나 할 경우 유리
curl 주요 옵션

이제 위 옵션을 사용하여 실제 HTTP 클라이언트로 동작하기 위한 예제를 살펴 봅시다.


사이트에 연결

사이트에 연결하는 과정을 자세히 출력(-v 옵션) 하며 HTTP 301 또는 302 응답이 올 경우 Location 으로 지정된 사이트로 이동(-L 옵션)합니다.

$ curl -v -L http://google.com
CODE
사이트 연결 정보 출력


HTTP 헤더 검사

사이트에 연결하여 Contents 는 제외하고 HTTP 헤더만 출력(-I 옵션)하며 이를 파이프로 받아서 grep 명령으로  X-Frame-Options 이라는 헤더가 있는지 확인합니다. 만약 SSL 인증서가 잘못 되어 있어도 검증 실패가 나지 않도록 검증을 끄는 옵션인 -k 를 사용합니다.


$ curl -L -I -k naver.com |grep -i X-Frame-Options
CODE
Response 헤더 확인


JSON 데이타 전송

아래와 같이 json 을 입력으로 하는 REST API 가 있을 경우 전송할 데이타를 파일로 생성합니다.

data.js

{
    "string": "foo",
    "number": 5
}
CODE


이제 데이타를 전송하는 -d 옵션을 이용하여 다음과 같이 사용자 인증 및 REST API 를 호출할 수 있습니다. 

curl -v -X POST -d @data.js -u userid:password  -H "Content-Type: application/json" http://requestb.in/1ahimt41
CODE
인증 정보와 함께 REST API 호출