Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

cURL 指令教學:從零開始學會用終端機測試 API 與傳輸檔案

最後更新:2026年4月7日基礎概念

你有沒有遇過這種情況:寫好了一支 API,想快速測試一下有沒有正常運作,卻不想花時間打開 Postman 或寫一段測試程式?

其實,你的終端機裡就內建了一個超強大的工具——cURL。

這篇文章會帶你從最基本的用法開始,一步步學會用 cURL 來發送 HTTP 請求、測試 REST API,甚至透過 FTP 上傳下載檔案。

不需要任何前置知識,只要你會打開終端機,就能跟著做。

cURL 是什麼?

cURL 是一個 命令行介面(Command-line Interface, CLI),用來在終端機裡傳送資料到伺服器,或從伺服器取得資料。

你可以把它想像成一個「沒有畫面的瀏覽器」——瀏覽器做的事情(發送請求、接收回應),cURL 都能做,只是結果顯示在終端機裡而已。

cURL 支援的協定(protocol)非常多,包括 HTTP、HTTPS、FTP、IMAP、POP3、SMTP 等等。

不過在實務上,最常用的還是 HTTP 和 FTP,這篇文章也會聚焦在這兩個協定上。

環境準備:確認你的電腦有 cURL

在開始之前,先確認你的電腦能不能使用 cURL。

macOS 和 Linux 的使用者通常不用擔心,現代版本的系統都已經內建了 cURL。

Windows 的使用者,推薦安裝 Git Bash(可以到 git-scm.com 下載)。

Git Bash 不只提供 cURL,還附帶了一整套 Unix 指令,而且比 Windows 內建的命令提示字元或 PowerShell 好用很多。

安裝完成後,打開終端機輸入以下指令,確認 cURL 可以正常使用:

curl --help

如果看到一大串選項說明,就代表安裝成功了。

用 cURL 發送第一個 GET 請求

我們會用一個免費的假 API 來練習,叫做 JSONPlaceholder。

這個網站提供了幾組測試資料,像是 posts(文章)、comments(留言)、users(使用者)等等,非常適合拿來練手。

取得所有文章

最簡單的用法,就是直接在 curl 後面接上網址:

curl https://jsonplaceholder.typicode.com/posts

執行後,終端機會顯示 100 篇文章的 JSON 資料。

取得單篇文章

如果只想取得某一篇文章,在網址後面加上 ID 就好:

curl https://jsonplaceholder.typicode.com/posts/3

這樣就會拿到 ID 為 3 的那篇文章。

查看 HTTP 回應標頭(Header)

有時候我們不只想看回應的內容,還想看伺服器回傳了哪些標頭資訊。

什麼時候會需要看標頭?舉幾個常見的情境:

  • 確認回應格式:透過 Content-Type 確認伺服器回傳的是 JSON、HTML 還是純文字,避免前端解析錯誤。
  • 除錯快取問題:透過 Cache-Control 或 ETag 確認資料有沒有被快取住,排查「明明改了資料但前端還是顯示舊的」這類問題。
  • 檢查跨域設定:透過 Access-Control-Allow-Origin 確認 CORS 有沒有設定正確,這在前後端分離的架構中很常遇到。
  • 追蹤重新導向:透過 Location 標頭確認伺服器把你導向了哪個網址。

同時顯示標頭和內容

使用小寫的 -i 旗標:

curl -i https://jsonplaceholder.typicode.com/posts/3

# 長版寫法:
curl --include https://jsonplaceholder.typicode.com/posts/3

執行後,你會看到標頭資訊出現在最上面,接著才是 JSON 內容。

標頭裡包含了像是 content-type: application/json(告訴你回應格式是 JSON)、content-length(資料長度)等實用資訊。

只顯示標頭

如果你只想看標頭、不需要內容,可以用大寫的 -I 旗標:

curl -I https://jsonplaceholder.typicode.com/posts/3

# 長版寫法:
curl --head https://jsonplaceholder.typicode.com/posts/3

小提示:cURL 的大部分選項都有「短版」和「長版」兩種寫法。

例如 -I 等同於 --head,效果一模一樣。

把回應內容存成檔案

如果你想把 API 回傳的資料儲存下來,而不是只顯示在螢幕上,cURL 也能辦到。

指定檔案名稱儲存

使用小寫的 -o(或 --output),後面接你想要的檔名:

curl -o test.txt https://jsonplaceholder.typicode.com/posts

# 長版寫法:
curl --output test.txt https://jsonplaceholder.typicode.com/posts

執行後,所有文章資料就會被存到 test.txt 裡面。

檔案會儲存在你「目前所在的資料夾」,也就是你執行指令時終端機所在的路徑。

如果不確定自己在哪個資料夾,可以輸入 pwd 來查看目前的路徑。

你可以用 cat test.txt 來確認內容有沒有正確寫入。

用原始檔名儲存

如果你不想自己取名,可以用大寫的 -O,cURL 會自動用網址最後一段當作檔名:

curl -O https://jsonplaceholder.typicode.com/posts

# 長版寫法:
curl --remote-name https://jsonplaceholder.typicode.com/posts

這樣就會產生一個叫做 posts 的檔案(沒有副檔名)。

用 cURL 下載檔案

cURL 不只能抓 API 資料,也能下載圖片或其他檔案。

下載圖片

假設你有一張圖片的網址,直接用 -O 就能下載:

curl -O https://example.com/image.png

# 長版寫法:
curl --remote-name https://example.com/image.png

執行完畢後,你的目錄下就會多出 image.png 這個檔案。

限制下載速度

如果你想限制傳輸速率(例如避免佔滿頻寬),可以加上 --limit-rate:

curl --limit-rate 1000B -O https://example.com/image.png

這裡的 1000B 代表每秒最多傳輸 1000 bytes。

用 cURL 發送 POST 請求(新增資料)

除了 GET 請求,cURL 也能發送 POST、PUT、DELETE 等其他類型的請求,這在測試 REST API 時非常實用。

發送 POST 請求

使用 -d(或 --data)旗標來帶上要傳送的資料:

curl -d "title=hello&body=hello world" https://jsonplaceholder.typicode.com/posts

# 長版寫法:
curl --data "title=hello&body=hello world" https://jsonplaceholder.typicode.com/posts

拆解一下這段指令:

-d 後面接的是你要傳送給伺服器的資料。

資料的格式是 key=value,就像在填表單一樣——左邊是欄位名稱,右邊是你要填的值。

如果有多個欄位,就用 & 把它們串在一起,例如 title=hello&body=hello world 就是同時送出 title 和 body 兩個欄位。

另外有一點很方便:當你使用 -d 時,cURL 會自動判斷這是一個 POST 請求,所以你不需要額外加 -X POST。

執行後,伺服器會回傳一個 JSON 物件,長這樣:

{
  "title": "hello",
  "body": "hello world",
  "id": 101
}

id: 101 是伺服器自動產生的,因為 JSONPlaceholder 原本已經有 100 筆文章,新增的下一筆自然就是 101。

用 cURL 發送 PUT 請求(更新資料)

PUT 請求用來更新整筆資料。

前面提到,使用 -d 時 cURL 會自動幫你設定為 POST 請求。

但如果你想發的不是 POST,而是 PUT,cURL 就沒辦法自動判斷了。

你必須用 -X PUT 明確告訴它「我要發的是 PUT 請求」。

-X 是 --request 的縮寫,意思是「指定請求方法」。

指定完方法後,再搭配 -d 帶上你要更新的資料:

curl -X PUT -d "title=hello" https://jsonplaceholder.typicode.com/posts/3

# 長版寫法:
curl --request PUT --data "title=hello" https://jsonplaceholder.typicode.com/posts/3

這段指令的意思是:把 ID 為 3 的文章,標題更新為 “hello”。

伺服器回傳的結果會顯示 id: 3 且 title 已經被改成 “hello”。

用 cURL 發送 DELETE 請求(刪除資料)

DELETE 請求更單純,不需要帶資料,只要指定方法和目標網址就好:

curl -X DELETE https://jsonplaceholder.typicode.com/posts/3

# 長版寫法:
curl --request DELETE https://jsonplaceholder.typicode.com/posts/3

成功的話,伺服器會回傳一個空物件 {},代表刪除操作已完成。

處理需要驗證的 API

如果 API 需要帳號密碼才能存取(例如 Basic Authentication),可以用 -u 旗標:

curl -u username:password https://api.example.com/protected

# 長版寫法:
curl --user username:password https://api.example.com/protected

-u 後面的格式是 帳號:密碼,cURL 會自動幫你處理認證的部分。

處理網址重新導向

有些網址會自動重新導向(redirect)到另一個網址。

例如,輸入 http://google.com 會被導向到 http://www.google.com。

如果你直接用 cURL 請求原始網址,只會看到一個「301 Moved」的回應:

curl http://google.com
# 回應:301 Moved,文件已搬到 www.google.com

要讓 cURL 自動跟隨重新導向,加上 -L 旗標就好:

curl -L http://google.com

# 長版寫法:
curl --location http://google.com

這樣 cURL 就會自動跟著跳轉,取得最終頁面的內容。

用 cURL 透過 FTP 上傳與下載檔案

cURL 除了 HTTP,也支援 FTP(檔案傳輸協定)。

如果你有 FTP 伺服器的帳號,就能直接用 cURL 上傳和下載檔案。

上傳檔案到 FTP 伺服器

使用 -T 旗標指定要上傳的檔案,搭配 -u 提供 FTP 帳密:

curl -u user@example.com:password -T hello.txt ftp://ftp.example.com/

# 長版寫法:
curl --user user@example.com:password --upload-file hello.txt ftp://ftp.example.com/

執行成功後,hello.txt 就會出現在 FTP 伺服器上。

從 FTP 伺服器下載檔案

把 -T 換成 -O,然後在網址後面指定檔案名稱:

curl -u user@example.com:password -O ftp://ftp.example.com/hello.txt

# 長版寫法:
curl --user user@example.com:password --remote-name ftp://ftp.example.com/hello.txt

檔案就會被下載到你目前的目錄下。

cURL 常用旗標速查表

旗標長版寫法用途
-i--include回應中包含標頭資訊
-I--head只取得標頭,不取內容
-o--output指定檔名儲存回應內容
-O—用原始檔名儲存
-d--data傳送資料(自動使用 POST)
-X--request指定 HTTP 請求方法
-u--user提供帳號密碼驗證
-L--location自動跟隨重新導向
-T--upload-file上傳檔案(用於 FTP)
—--limit-rate限制傳輸速率
長版寫法--include
用途回應中包含標頭資訊
長版寫法--head
用途只取得標頭,不取內容
長版寫法--output
用途指定檔名儲存回應內容
長版寫法—
用途用原始檔名儲存
長版寫法--data
用途傳送資料(自動使用 POST)
長版寫法--request
用途指定 HTTP 請求方法
長版寫法--user
用途提供帳號密碼驗證
長版寫法--location
用途自動跟隨重新導向
長版寫法--upload-file
用途上傳檔案(用於 FTP)
長版寫法--limit-rate
用途限制傳輸速率

小結

這篇文章涵蓋了 cURL 最常用的功能,快速回顧一下你學到了什麼:

  • cURL 是一個命令行介面工具,用來在終端機裡傳送和接收資料。
  • 用 curl <網址> 就能發送最基本的 GET 請求。
  • -i 和 -I 可以查看回應的標頭資訊。
  • -o 和 -O 可以把回應存成檔案。
  • -d 可以發送 POST 請求並帶上資料。
  • -X 可以指定任何 HTTP 方法(PUT、DELETE 等)。
  • -u 可以處理需要帳號密碼的 API。
  • -L 可以自動跟隨重新導向。
  • cURL 也支援 FTP 協定,能用 -T 上傳、-O 下載檔案。

cURL 的功能遠不止這些,但掌握了這些基礎操作,你已經足以應付大部分的 API 測試和檔案傳輸需求了。

下次寫好 API 想快速測試時,不妨打開終端機試試看吧!

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

基礎概念

目錄

  • cURL 是什麼?
  • 環境準備:確認你的電腦有 cURL
  • 用 cURL 發送第一個 GET 請求
  • 取得所有文章
  • 取得單篇文章
  • 查看 HTTP 回應標頭(Header)
  • 同時顯示標頭和內容
  • 只顯示標頭
  • 把回應內容存成檔案
  • 指定檔案名稱儲存
  • 用原始檔名儲存
  • 用 cURL 下載檔案
  • 下載圖片
  • 限制下載速度
  • 用 cURL 發送 POST 請求(新增資料)
  • 發送 POST 請求
  • 用 cURL 發送 PUT 請求(更新資料)
  • 用 cURL 發送 DELETE 請求(刪除資料)
  • 處理需要驗證的 API
  • 處理網址重新導向
  • 用 cURL 透過 FTP 上傳與下載檔案
  • 上傳檔案到 FTP 伺服器
  • 從 FTP 伺服器下載檔案
  • cURL 常用旗標速查表
  • 小結