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

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


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


사용법

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


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

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


사이트에 연결

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


HTTP 헤더 검사

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



JSON 데이타 전송

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

data.js

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


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