Curl 사용법 정리

2022년 9월 29일 수정

이 글은 Curl의 일반적인 사용법을 정리한다. 약간 특수한 사용법은 Curl의 약간 특별한 사용법을 참고하자.

사이트 응답 확인하기

가장 기본적인 사용법으로 그냥 URL을 붙이면 응답을 얻을 수 있다.

curl https://google.com

응답(body)이 화면에 그냥 출력된다는 점에 유의하자. wget과는 다르다.

요청 응답 상세 보기

-v (Verbose) 옵션을 줄 경우 상세한 로그도 함께 표시된다.

curl -v https://google.com

내용 중에는 요청하는 헤더와 리퀘스트, 그리고 응답으로 오는 헤더와 내용(body)을 전부 확인할 수 있다. 리다이렉트되는 페이지를 확인하려면 헤더까지 확인하지 않으면 제대로 알 수 없는 데 이럴 때 쓸 만하다.

커스텀 헤더

-H 옵션을 이용해 헤더를 정의할 수 있다.

curl -H 'Foo: Bar' https://foo.bar

당연하겠지만 foo.bar 라는 사이트가 실존하지는 않는다. 그냥 저기에 사이트 주소가 들어가야 한다.

일반적인 POST

POST로 폼(form) 데이터를 함께 요청하려면 -d 옵션을 쓸 수 있다.

curl -d 'key=value' -d 'foo=bar' https://foo.bar

JSON 데이터를 POST 하려면 헤더가 별도로 필요하다.

curl -H 'Content-Type: application/json' -d '{"foo": "bar"}' https://foo.bar

-d 옵션과 -F 옵션은 같이 쓸 수가 없다. 멀티파트를 쓴다면 아래 파일 업로드 항목을 참고하자.

파일 업로드

파일을 업로드 하려면 -F 혹은 --form 옵션을 사용할 수 있다.

curl -F 'file=@/foo/bar/path' -F 'key=value' https://foo.bar

요청은 POST로 multipart/form-data 형식으로 날아간다.

위의 예에서 파일 경로 앞에 골뱅이 @ 가 붙어있는데 오타가 아니라 파일을 구분하는 요소다. 반면 key=value 라는 폼 데이터에는 골뱅이가 안 붙어 있는데 파일이 아닌 일반 폼 데이터라 그렇다.

-d 옵션과 -F 옵션은 중복으로 사용할 수 없다. 따라서 파일을 첨부한 경우 모든 폼 데이터는 -F 옵션으로 넘겨주어야 한다.

요청 메소드(Request Method)

GET 이나 POST 는 자주 쓰이는 만큼 위에서 다뤘는데 만약 만약 PUT 이나 DELETE 같은 메소드를 쓰고 싶다면 어떻게 해야 할까?

이럴 때는 별도로 -X 옵션을 이용해야 한다.

curl -X PUT -d 'foo=bar' https://foo.bar

REST API를 개발할 때 테스트 용도로 자주 쓸 만하다.

파일 다운로드

일반적인 테스트 내용물의 경우 그냥 라다이펙트 시켜서 파일로 받을 수 있다.

curl https://foo.bar > foobar.html

하지만 이보다는 별도의 --output 옵션을 사용하는 편이 좋다.

curl https://foo.bar/path/to/image.jpg --output downloaded_image.jpg