知識庫 / REST RSS 訂閱

使用 curl 測試 REST API

REST
HongKong
4
03:50 AM · Dec 06 ,2025

1. 概述

本教程提供了一個簡要的概述,介紹了使用 curl 測試 REST API 的方法。

curl 是一種命令行工具,用於數據傳輸,並支持約 22 種協議,包括 HTTP。 這種組合使其成為測試我們 REST 服務的一個非常好的臨時工具。

2. 命令行選項

<em >curl</em> 支持超過 200 個命令行選項。我們可以使用零個或多個選項來搭配命令中的 URL。

在將其用於我們的用途之前,讓我們先查看兩個可以使我們的生活更輕鬆的選項。

2.1. 詳細模式 (Verbose)

當進行測試時,建議開啓詳細模式:

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

因此,這些命令提供有用的信息,例如已解析的 IP 地址、我們嘗試連接的端口以及 HTTP 標頭。

2.2. 輸出

默認情況下,curl 將響應體輸出到標準輸出。 此外,我們還可以通過提供輸出選項來保存到文件中:

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

這在響應大小較大的情況下尤其有用。

3. 使用 curl 的 HTTP 方法

每個 HTTP 請求都包含一個方法。 最常用的方法是 GET、POST、PUT 和 DELETE。

3.1. GET

這是一個默認方法,用於通過curl進行HTTP調用。事實上,之前展示的示例都是簡單的GET調用。

在本地運行服務實例(端口8082)時,我們使用類似以下的命令進行GET調用:

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

由於我們啓用了詳細模式,因此我們還會收到響應體中一些額外的信息。

*   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. POST

我們使用此方法向接收服務發送數據,這意味着我們使用 data 選項。

最簡單的方法是直接在命令中嵌入數據:

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

當然,以下是翻譯後的內容:

或者,我們可以通過將請求主體包含在文件中傳遞給 data 選項,例如如下所示:

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 風格的 Shell。

因此,我們需要將單引號替換為雙引號,但我們會盡力在必要時進行轉義:

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

此外,當我們需要發送較大的數據量時,通常使用數據文件也是一個不錯的選擇。

3.3. PUT

此方法與 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. 刪除 (DELETE)

再次説明,我們使用 DELETE 操作,通過使用 -X 選項來實現:

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

4. 自定義標題

我們可以替換默認標題或添加自定義標題。

例如,要更改 Host 標題,我們這樣做:

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

為了關閉 User-Agent 請求頭,我們將其設置為空值:

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

在測試過程中,最常見的做法是更改 Content-Type 和 Accept header。我們只需在每個 header 前添加 -H 選項:

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

5. 身份驗證

一個需要身份驗證的服務會返回一個 401 – Unauthorized HTTP 響應代碼,並附帶一個 WWW-Authenticate 標頭。

對於基本的身份驗證,我們可以只需在請求中嵌入用户名和密碼組合,使用 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. 結論

在本文中,我們演示了使用 curl 命令的最小功能來測試我們的 REST 服務。雖然它能夠執行比此處討論的更多操作,但對於我們的目的而言,這已經足夠了。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.