본문 바로가기

알아두면 좋은

curl의 -X 옵션과 몇 가지

curl의 -X 옵션

curl의 -X 옵션이 하는 역할이 무엇인지 궁금해서 찾아보았다.
공식 문서에는 이렇게 적혀있다.

-X, --request <method>
       Change the method to use when starting the transfer.

       curl passes on the verbatim string you give it its the request
       without any filter or other safe guards. That includes white
       space and control characters.

해석하면 이렇다.

전송을 시작할 때 사용할 매서드를 변경합니다.
curl은 필터나 기타 안전 장치 없이 요청에 제공한 문자열을 그대로 전달합니다.
여기에는 공백과 제어 문자가 포함됩니다.

curl은 HTTP의 GET을 기본 매서드로 요청한다.
그런데 GET말고 POST나 PUT, DELETE와 같은 다른 매서드로 요청하고 싶을 때 -X 옵션을 붙여야 한다. 위 문서에도 적혀있듯이 -X말고 --request라고 써도 똑같이 동작한다.

예제

예를 들어보자.

GET 요청

curl http://example.com

이것은 curl에 아무런 옵션을 붙이지 않았으므로 GET 매서드를 사용한다.
이는 아래와 같다.

curl -X GET http://example.com

POST 요청

GET이 아닌 POST로 요청하고 싶다면 -X 옵션을 쓰고 뒤에 원하는 매서드를 입력하면 된다.

curl -X POST http://example.com

데이터를 포함한 POST 요청

-d 옵션을 더하면 데이터를 포함하여 전송할 수 있다.

curl -X POST -d "name=curl" http://example.com

참고로 -d 옵션을 사용하면 curl은 자동으로 POST 매서드로 요청을 보낸다.
그러니까 바로 위 명령은 아래와 같다는 의미이다.

curl -d "name=curl" http://example.com

curl로 JSON 데이터 보내기

그렇다면 JSON데이터를 보내려면 어떻게 하면 될까?
이렇게 하면된다.

JSON 데이터 포함한 POST 요청

curl -X POST http://example.com \
-H "Content-Type: application/json"
-d '{"name":"curl"}'

-H 옵션으로 콘텐츠 타입을 알려주고 -d 옵션 뒤에 JSON 데이터 내용을 보내주면 된다.
이것을 더 간단하게 보낼 수도 있다.

--json 옵션으로 요청

curl --json '{"name":"curl"}' http://example.com

훨씬 단순해졌다. curl에는 --json이라는 옵션이 준비되어 있다.
공식 문서를 설펴보면 이렇게 적혀있다.

--json <data>
       (HTTP) Sends the specified JSON data in a POST request to the
       HTTP server. --json works as a shortcut for passing on these
       three options:

         --data [arg]
       --header "Content-Type: application/json"
       --header "Accept: application/json"

요약하면 --json 옵션을 사용하면 POST 요청을 보내게 되어 있고 필요한 헤더 설정도 알아서 붙게 된다는 말이다.

JSON 파일을 불러서 요청

마지막으로 한 가지만 더.
JSON 파일을 보내고 싶다면 @기호를 붙여서 파일 경로를 적으면 된다.

curl --json @data.json http://example.com

이제 curl을 이용해서 GET, POST 요청을 보낼 수 있게 되었다.
그리고 JSON 데이터를 아주 간단하게 보내는 방법도 알게되었다.