curl 로 command line 에서 HTTP 요청하기

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

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


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


사용법

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


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

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


사이트에 연결

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

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


HTTP 헤더 검사

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


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


JSON 데이타 전송

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

data.js
{
    "string": "foo",
    "number": 5
}


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

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