1. 개요

이 예제은 curl을 사용하여 REST API를 테스트하는 방법에 대한 간략한 개요를 제공합니다 .

curl 은 데이터 전송을위한 명령 줄 도구이며 HTTP를 포함하여 약 22 개의 프로토콜을 지원합니다. 이 조합은 REST 서비스를 테스트하기위한 아주 좋은 임시 도구입니다.

2. 명령 줄 옵션

curl 은 200 개 이상의 명령 줄 옵션을 지원합니다 . 명령의 URL과 함께 0 개 이상을 사용할 수 있습니다.

우리의 목적을 위해 그것을 사용하기 전에, 우리의 삶을 더 쉽게 만들어 줄 두 가지를 살펴 보겠습니다.

2.1. 말 수가 많은

테스트 할 때 상세 모드를 다음으로 설정하는 것이 좋습니다.

curl -v http://www.example.com/

결과적으로 명령은 확인 된 IP 주소, 연결하려는 포트 및 헤더와 같은 유용한 정보를 제공합니다.

2.2. 산출

기본적으로 curl 은 Response body을 표준 출력으로 출력합니다. 또한 파일에 저장할 출력 옵션을 제공 할 수 있습니다.

curl -o out.json http://www.example.com/index.html

이는 응답 크기가 클 때 특히 유용합니다.

3. curl을 사용한 HTTP 메소드

모든 HTTP 요청에는 메서드가 포함되어 있습니다. 가장 일반적으로 사용되는 방법은 GET, POST, PUT 및 DELETE입니다.

3.1. 가져 오기

이것은 curl을 사용 하여 HTTP 호출을 할 때의 기본 방법 입니다. 실제로 이전에 표시된 예제는 일반 GET 호출입니다.

포트 8082에서 서비스의 로컬 인스턴스를 실행하는 동안 다음 명령과 같은 것을 사용하여 GET 호출을 수행합니다.

curl -v http://localhost:8082/spring-rest/foos/9

verbose 모드가 켜져 있으므로 Response body과 함께 조금 더 많은 정보를 얻습니다.

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8082 (#0)
> GET /spring-rest/foos/9 HTTP/1.1
> Host: localhost:8082
> User-Agent: curl/7.60.0
> Accept: */*
>
< HTTP/1.1 200
< X-Application-Context: application:8082
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Sun, 15 Jul 2018 11:55:26 GMT
<
{
  "id" : 9,
  "name" : "TuwJ"
}* Connection #0 to host localhost left intact

3.2. 게시하다

이 방법을 사용하여 수신 서비스에 데이터를 전송합니다. 즉, 데이터 옵션을 사용합니다.

이를 수행하는 가장 간단한 방법은 명령에 데이터를 포함하는 것입니다.

curl -d 'id=9&name=baeldung' http://localhost:8082/spring-rest/foos/new

또는 다음과 같이 요청 본문이 포함 된 파일을 데이터 옵션에 전달할 수 있습니다.

curl -d @request.json -H "Content-Type: application/json" 
  http://localhost:8082/spring-rest/foos/new

위의 명령을 그대로 사용하면 다음과 같은 오류 메시지가 나타날 수 있습니다.

{
  "timestamp" : "15-07-2018 05:57",
  "status" : 415,
  "error" : "Unsupported Media Type",
  "exception" : "org.springframework.web.HttpMediaTypeNotSupportedException",
  "message" : "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported",
  "path" : "/spring-rest/foos/new"
}

curl모든 POST 요청에 다음 기본 헤더를 추가 하기 때문입니다 .

Content-Type: application/x-www-form-urlencoded

이것은 또한 브라우저가 일반 POST에서 사용하는 것입니다. 우리는 일반적으로 필요에 따라 헤더를 사용자 정의하고 싶습니다.

예를 들어 서비스가 JSON 콘텐츠 유형을 예상하는 경우 -H 옵션을 사용하여 원래 POST 요청을 수정할 수 있습니다.

curl -d '{"id":9,"name":"baeldung"}' -H 'Content-Type: application/json' 
  http://localhost:8082/spring-rest/foos/new

Windows 명령 프롬프트는 Unix 유사 쉘과 같은 작은 따옴표를 지원하지 않습니다.

결과적으로 작은 따옴표를 큰 따옴표로 바꿔야하지만 필요할 때마다 이스케이프 처리를 시도합니다.

curl -d "{\"id\":9,\"name\":\"baeldung\"}" -H "Content-Type: application/json" 
  http://localhost:8082/spring-rest/foos/new

게다가 좀 더 많은 양의 데이터를 보내려면 일반적으로 데이터 파일을 사용하는 것이 좋습니다.

3.3. 놓다

이 메서드는 POST와 매우 유사하지만 기존 리소스의 새 버전을 보내려고 할 때 사용합니다. 이를 위해 -X 옵션을 사용합니다.

요청 메소드 유형에 대한 언급이없는 경우 curl은 기본적으로 GET을 사용합니다. 따라서 PUT의 경우 메서드 유형을 명시 적으로 언급합니다.

curl -d @request.json -H 'Content-Type: application/json' 
  -X PUT http://localhost:8082/spring-rest/foos/9

3.4. 지우다

다시, -X 옵션을 사용하여 DELETE를 사용하도록 지정합니다.

curl -X DELETE http://localhost:8082/spring-rest/foos/9

4. 사용자 정의 헤더

기본 헤더를 바꾸거나 자체 헤더를 추가 할 수 있습니다.

예를 들어 호스트 헤더를 변경하려면 다음을 수행합니다.

curl -H "Host: com.baeldung" http://example.com/

User-Agent 헤더를 끄려면 빈 값을 입력합니다.

curl -H "User-Agent:" http://example.com/

테스트하는 동안 가장 일반적인 시나리오는 Content-Type 및 Accept 헤더를 변경하는 것입니다. 각 헤더에 -H 옵션을 붙이기 만하면됩니다.

curl -d @request.json -H "Content-Type: application/json" 
  -H "Accept: application/json" http://localhost:8082/spring-rest/foos/new

5. 인증

인증이 필요한 서비스 401 다시 보낼 것이다 - 인증되지 않은 HTTP 응답 코드를, 및 관련 WWW 인증 헤더.

기본 인증의 경우 user 옵션을 사용하여 요청에 사용자 이름과 비밀번호 조합을 삽입 할 수 있습니다 .

curl --user baeldung:secretPassword http://example.com/

그러나 인증에 OAuth2사용하려면 먼저 인증 서비스에서 access_token가져와야 합니다.

서비스 응답에는 access_token 이 포함됩니다 .

{
  "access_token": "b1094abc0-54a4-3eab-7213-877142c33fh3",
  "token_type": "bearer",
  "refresh_token": "253begef-868c-5d48-92e8-448c2ec4bd91",
  "expires_in": 31234
}

이제 Authorization 헤더에서 토큰을 사용할 수 있습니다.

curl -H "Authorization: Bearer b1094abc0-54a4-3eab-7213-877142c33fh3" http://example.com/

6. 결론

이 기사에서는 REST 서비스를 테스트하기 위해 curl의 최소한의 기능을 사용하는 방법을 시연했습니다 . 여기서 논의한 것보다 훨씬 더 많은 일을 할 수 있지만, 우리의 목적을 위해서는이 정도면 충분합니다.

사용 가능한 모든 옵션을 확인하려면 명령 줄에 curl -h 를 입력 하십시오. 데모에 사용 된 REST 서비스는 여기 GitHub에서 사용할 수 있습니다 .