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에서 사용할 수 있습니다 .