2024-07-31,   조평연

본 포스팅은 curl 을 알아보는 내용입니다.

1. curl 이란?

  • curl (client url) 이란 프로토콜을 이용해 URL 로 데이터를 전송하여 서버에 데이터를 보내거나 가져올때 사용하기 위한 명령줄 도구 및 라이브러리이다.

  • 예를들면 자바스크립트 환경에서 REST API (http) 를 테스트 하고 싶다면 ajax, fetch 를 이용해 요청을 보내느것과 동일하다.

  • 쉘 (커맨드라인 환경) 에서 REST API (http) 테스트를 하고 싶을때 curl 명령어를 이용하면 된다고 이해하면 된다.

  • 이밖에 HTTP / HTTPS / FTP / LDAP / SCP / TELNET / SMTP / POP3 등 다양하고 주요한 프로토콜을 지원하며 Linux/Unix 계열 및 Windows 등 주요한 OS 에서 구동되므로 여러 플랫폼과 OS에서 유용하게 사용할 수 있다.

  • 이렇게 다양하고 강력한 기능을 가진 옵션들을 제공하지만, 보통 특정 서버에서 빠르게 방화벽 예외 상태를 테스트 하거나, REST 서비스 테스트를 위해 사용되는 편이다.

2. curl 설치

  • Linux나 Mac OS 에는 curl 명령어 패키지가 기본 탑재되어 있다.
  • Window에서도 설치하여 사용할수 있지만 일반적으로 윈도우에는 편리하게 사용 가능한 tool이나 Postman과 같은 프로그램들이 많기 때문에 잘 사용하지 않는 편이긴 하다.

3. curl 명령어 옵션

  • 특정 URL을 대상으로 동작하며 URL 앞에는 curl의 옵션을 사용하면 된다.
  • curl 명령의 옵션은 하이픈 하나(-)로 시작하는 short 형식과 하이픈 두개(–)로 시작하는 long 형식 모두 지원한다.
    $ curl [options...] <url>
    $ curl --help all # 전체 명령어 보기

4. curl http 메서드

  • GET 요청
      $ curl www.example.com
    
      $ curl -X GET www.example.com
      # GET방식은 Body 없음
      # -X 요청메소드 종류 명시
    


  • POST 요청
      # url 형식 데이터
    
      $ curl -d "key1=value1&key2=value2" \ 
      -H "Content-Type: application/x-www-form-urlencoded" \ 
      -X POST http://localhost:8080/data 
    
      # -d 옵션으로 body 데이터를 기재
      # -H 옵션으로 전송할 헤더 지정 (디폴트 : application/x-www-form-urlencoded)
      # -X 옵션으로 POST 메소드 지정하고 요청할 url명시
    
    
      # JSON 형식 데이터
    
      $ curl -d '{"key1":"value1", "key2":"value2"}' \
      -H "Content-Type: application/json" \
      -X POST http://localhost:8080/data
    
    
      # 파라미터값을 파일로 지정해서 보내기
    
      curl -d "@data.txt" -X POST http://localhost:8080/data
    
      curl -d "@data.json" -X POST http://localhost:8080/data
    


  • PUT 요청
      $ curl -X PUT -d 'name=inpa&email=inpa@gmail.com' http://localhost:8080/user/100
      $ curl -X PUT -H "Content-Type: application/json" -d '{"name":"inpa","email":"inpa@gmail.com"}' http://localhost:8080/user/100
    
      # 파일명으로 PUT
      $ curl -T filename.txt http://www.example.com/dir/
    


  • PUT 요청
      $ curl -X DELETE http://localhost:8080/user/100
    

5. 참고문헌

  • https://curl.se/docs/

업데이트: