message
公告欄
全部公告
$0

身份未認證
ico_andr

儀表板

ico_andr

代理設定

right
API 提取
帳密驗證
代理管理器
Local Time Zone

本地時區

right
使用設備的本地時區
(UTC+0:00) 格林威治標準時間
(UTC-8:00) 太平洋時間(美國和加拿大)
(UTC-7:00) 亞利桑那州(美國)
(UTC+8:00) 香港(CN)、新加坡
ico_andr

帳戶

ico_andr

我的消息

icon
Ticket Center
icon

身份認證

img $0
logo

EN

img 語言
ico_andr

Dashboard

API Extraction
User & Pass Auth
Proxy Manager
Use the device's local time zone
(UTC+0:00) Greenwich Mean Time
(UTC-8:00) Pacific Time (US & Canada)
(UTC-7:00) Arizona(US)
(UTC+8:00) Hong Kong(CN), Singapore
ico_andr

Account

icon
Ticket Center
首頁 img 博客 img 如何使用cURL發送HTTP頭?一份完整的指南

如何使用cURL發送HTTP頭?一份完整的指南

作者 Niko
上傳時間: 2025-08-18
更新時間: 2025-08-18

無論您是與API交互的開發人員、測試Web服務的QA工程師,還是自動化腳本的系統管理員,cURL都是您工具箱中不可或缺的瑞士軍刀。這個強大的命令行工具能夠傳輸來自或發送到伺服器的數據。然而,要真正釋放cURL的全部潛力,您必須掌握如何操作HTTP頭。cURL請求頭是HTTP請求的核心組成部分,它們向伺服器傳遞了關於請求本身、客戶端以及期望回應類型的關鍵元數據。

 

正確地設置cURL請求頭,可以讓您模擬不同的流覽器、進行身份驗證、請求特定的數據格式(如JSON或XML),甚至影響伺服器的緩存行為。許多高級的Web交互都依賴於自定義HTTP頭,如果不知道如何發送它們,您的任務可能會停滯不前。

 

本指南旨在成為您學習如何使用cURL發送HTTP請求頭的權威資源。我們將從基礎知識開始,逐步深入到高級用例,涵蓋從查看默認請求頭到發送多個自定義請求頭的所有內容。讀完本文後,您將能夠自信地構建任何您需要的HTTP請求,從而更精確、更高效地與Web服務進行通信。

 

如何使用cURL發送HTTP請求頭?

 

使用cURL發送HTTP請求頭的核心是-H或--header標誌。這個標誌允許您在命令行中直接定義一個要包含在請求中的HTTP頭。其基本語法非常簡單直觀:

 

downloadcontent_copyexpand_less

    curl -H "Header-Name: Header-Value" https://example.com

  

在這裏:

 

-H "...": 告訴cURL您正在定義一個請求頭。

 

Header-Name: 您想要發送的HTTP頭的名稱(例如 Content-Type)。

 

Header-Value: 您為該請求頭設定的值(例如 application/json)。

 

https://example.com: 您的目標URL。

 

這個簡單的命令是您需要掌握的所有關於cURL請求頭操作的基礎。接下來的部分將在此基礎上展開,展示其強大的靈活性。

 

cURL默認發送哪些請求頭?

 

在您手動添加任何內容之前,cURL已經足夠智能,會自動發送一些默認的HTTP請求頭,以確保請求能夠被大多數Web伺服器正確處理。要查看這些默認的cURL請求頭,您可以使用-v或--verbose標誌,它會列印出詳細的連接資訊,包括出站的請求頭。

 

讓我們來看一個簡單的GET請求:

 

downloadcontent_copyexpand_less

IGNORE_WHEN_COPYING_START

IGNORE_WHEN_COPYING_END

    curl -v https://example.com

  

在輸出中,您會看到以 > 開頭的行,這些代表您的客戶端(cURL)發送給伺服器的數據。您通常會看到類似這樣的默認請求頭:

 

downloadcontent_copyexpand_less

IGNORE_WHEN_COPYING_START

IGNORE_WHEN_COPYING_END

    > GET / HTTP/1.1> Host: example.com> User-Agent: curl/7.64.1> Accept: */*

>

  

Host: 這是必需的請求頭,它指明了請求的目標伺服器功能變數名稱。

 

User-Agent: 標識了發起請求的客戶端。默認情況下,它會表明自己是curl以及其版本號。

 

Accept: 這個請求頭告訴伺服器,客戶端可以接受任何類型的回應(*/*代表“任何類型”)。

 

如果您發送一個帶有數據的POST請求(例如使用-d標誌),cURL還會自動添加另外兩個默認請求頭:

 

Content-Length: 告訴伺服器您發送的數據有多大。

 

Content-Type: 默認值為application/x-www-form-urlencoded。

 

瞭解這些默認值非常重要,因為在很多情況下,您需要覆蓋它們以滿足特定API或Web應用的需求。

 

如何使用-H標誌更改默認請求頭?

 

現在我們知道了cURL會發送默認請求頭,那麼如何更改它們呢?這非常簡單:只需使用-H標誌並提供您想要更改的請求頭的名稱和新值即可。cURL會自動用您提供的值替換默認值。

最常見的例子是更改User-Agent。許多Web服務會根據User-Agent來提供不同的內容,模擬一個真實的流覽器通常是網頁抓取或測試中的常見做法。

 

示例:更改User-Agent請求頭

 

downloadcontent_copyexpand_less

IGNORE_WHEN_COPYING_START

IGNORE_WHEN_COPYING_END

    curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" https://example.com

  

在這個命令中,cURL將不再發送User-Agent: curl/7.64.1,而是發送您指定的、看起來像Chrome流覽器的User-Agent字串。這種覆蓋默認cURL請求頭的能力,是進行高級Web交互的第一步。

 

發送自定義HTTP請求頭

 

除了更改默認請求頭,-H標誌最強大的功能在於發送cURL默認不會發送的自定義cURL請求頭。這對於與現代API進行交互至關重要。

 

示例1:發送用於API認證的Authorization請求頭

 

許多API都使用Bearer Token方案進行身份驗證。客戶端必須在Authorization請求頭中提供一個有效的令牌。

 

downloadcontent_copyexpand_less

IGNORE_WHEN_COPYING_START

IGNORE_WHEN_COPYING_END

    curl -H "Authorization: Bearer YourApiTokenGoesHere" https://api.example.com/v1/data

  

如果沒有這個自定義請求頭,API伺服器很可能會返回一個401 Unauthorized錯誤。

 

示例2:為JSON API指定Content-Type

 

當您向API發送JSON數據時,您必須明確告訴伺服器您發送的數據格式是application/json。雖然cURL在您使用-d時會默認發送Content-Type,但其默認值是為表單數據設計的。您需要手動覆蓋它。

 

downloadcontent_copyexpand_less

IGNORE_WHEN_COPYING_START

IGNORE_WHEN_COPYING_END

    curl -X POST -H "Content-Type: application/json" -d '{"name":"John Doe","email":"[email protected]"}' https://api.example.com/v1/users

  

在這個例子中,我們使用cURL發送了一個自定義HTTP請求頭 (Content-Type),以確保API能夠正確解析我們發送的JSON負載。

 

發送多個請求頭

 

在實際應用中,您常常需要一次性發送多個自定義或覆蓋的請求頭。例如,您可能需要同時提供Authorization令牌和Content-Type。

 

要發送多個cURL請求頭,您只需多次使用-H標誌即可。

 

示例:同時發送Authorization和Content-Type請求頭

 

downloadcontent_copyexpand_less

IGNORE_WHEN_COPYING_START

IGNORE_WHEN_COPYING_END

    curl -X POST \

  -H "Authorization: Bearer YourApiTokenGoesHere" \

  -H "Content-Type: application/json" \

  -d '{"key":"value"}' \

  https://api.example.com/v1/resource

  

cURL會將您提供的每一個-H標誌都作為一個獨立的HTTP頭包含在出站請求中。您可以根據需要添加任意數量的請求頭,這種靈活性使得cURL能夠構建出任何複雜的HTTP請求。

 

發送空請求頭以移除默認值

 

這是一個更高級的技巧。有時,您可能不只是想更改一個默認請求頭,而是想完全移除它。例如,某些特殊的測試場景可能要求請求中不包含Accept頭。

 

要做到這一點,您可以在請求頭名稱後緊跟一個分號;來提供一個空值。

 

示例:移除默認的Accept請求頭

 

downloadcontent_copyexpand_less

IGNORE_WHEN_COPYING_START

IGNORE_WHEN_COPYING_END

    curl -v -H "Accept;" https://example.com

  

當您運行這個命令並查看詳細輸出時,您會發現出站請求中不再包含Accept: */*這一行。這對於需要精確構建請求以進行調試或測試的場景非常有用。

 

如何使用cURL顯示HTTP回應頭?

 

到目前為止,我們一直專注於如何發送 cURL請求頭。但同樣重要的是,要能夠查看伺服器返回的回應頭。回應頭包含了關於回應的重要資訊,如內容類型、伺服器軟體、緩存策略和Cookie。

 

cURL提供了兩個主要的標誌來查看回應頭:

 

-i 或 --include: 這個標誌會在輸出中同時包含HTTP回應頭和回應體。這對於查看完整回應非常有用。

 

downloadcontent_copyexpand_less

 

IGNORE_WHEN_COPYING_START

 

IGNORE_WHEN_COPYING_END

 

    curl -i https://example.com

  

輸出會先顯示HTTP狀態行(如HTTP/1.1 200 OK),接著是所有的回應頭,然後是一個空行,最後是HTML頁面內容。

 

-I 或 --head: 這個標誌告訴cURL只獲取並顯示HTTP回應頭。它通過發送一個HEAD請求而不是GET請求來實現這一點,這更高效,因為伺服器不會返回回應體。

 

downloadcontent_copyexpand_less

 

IGNORE_WHEN_COPYING_START

 

IGNORE_WHEN_COPYING_END

 

    curl -I https://example.com

 

輸出將只包含狀態行和回應頭,非常適合快速檢查伺服器狀態或調試重定向。

 

cURL請求頭的常見用例

 

掌握了如何操作cURL請求頭後,您可以將其應用於多種實際場景中:

 

API測試: 發送Authorization頭進行認證,Content-Type頭指定數據格式,以及其他API要求的自定義頭(如X-Api-Key)。

 

Web內容抓取: 設置一個逼真的User-Agent來模擬流覽器,發送Accept-Language頭來請求特定語言的內容,或者提供Referer頭來模擬從另一個頁面跳轉而來。

 

內容協商: 使用Accept頭(例如Accept: application/json)來明確告知伺服器您希望接收的數據格式。

 

Web緩存測試: 發送Cache-Control: no-cache來請求最新的資源,或者發送If-None-Match頭來檢查資源是否有更新。

 

會話和狀態管理: 使用Cookie頭來發送之前由伺服器設置的Cookie,以維持登錄狀態或用戶會話。

 

結論

 

HTTP頭是Web通信的無名英雄,而cURL則為您提供了一套強大而靈活的工具來精確地駕馭它們。通過簡單而強大的-H標誌,您可以覆蓋默認值、添加自定義元數據,甚至完全移除某些cURL請求頭。無論您是需要模擬特定流覽器、與受保護的API交互,還是調試複雜的Web問題,掌握如何使用cURL發送HTTP請求頭都是一項至關重要的技能。

 

我們已經從基礎語法講到了高級技巧和實際用例。現在,您應該已經具備了足夠的知識,可以開始在自己的專案中自信地使用cURL請求頭了。下次當您需要構建一個超越簡單GET請求的HTTP交互時,記住-H標誌,它將是您通往成功的鑰匙。

 

常見問題解答 (FAQ)

 

Q1: -H 和 --header 有什麼區別嗎?


A: 完全沒有區別。它們是同一個標誌的兩種不同形式。-H是簡寫形式(short form),而--header是更具描述性的完整形式(long form)。它們的功能是完全相同的,您可以根據個人偏好選擇使用哪一個。在腳本中,人們通常使用-H以保持簡潔。

 

Q2: 我可以在同一個-H標誌中發送多個請求頭嗎?


A: 不可以。每一個-H或--header標誌只能定義一個HTTP頭。如果您需要發送多個請求頭,您必須多次使用-H標誌,例如:curl -H "Header1: Value1" -H "Header2: Value2" ...。

 

Q3: 如何使用cURL發送包含空格的請求頭值?


A: 就像我們在User-Agent示例中看到的那樣,您需要將整個請求頭(包括名稱和值)用雙引號"包裹起來。例如:curl -H "X-Custom-Header: This value has spaces" https://example.com。

 

Q4: cURL會自動處理Cookie嗎?


A: 默認情況下不會。雖然伺服器可以通過Set-Cookie回應頭髮送Cookie,但cURL不會自動在後續請求中將其發送回去。要管理Cookie,您需要使用-c(--cookie-jar)標誌來保存收到的Cookie到一個檔,並使用-b(--cookie)標誌來從該檔讀取併發送Cookie。例如:curl -c cookies.txt https://example.com/login 然後 curl -b cookies.txt https://example.com/dashboard。

 

Q5: cURL發送請求頭的順序重要嗎?


A: 根據HTTP/1.1規範,請求頭的順序通常不重要,但有一些例外。例如,Host頭通常是第一個。然而,在99.9%的實際應用中,您無需擔心您在命令行中-H標誌的排列順序。cURL和服務器會正確地處理它們。

 

Q6: 如何從檔中讀取請求頭?


A: 如果您有大量請求頭或者希望將它們與腳本分離,可以將它們保存在一個檔中,每行一個請求頭。然後,您可以簡單地在cURL命令中迴圈讀取這個檔。一個簡單的bash示例如下:

 

downloadcontent_copyexpand_less

IGNORE_WHEN_COPYING_START

IGNORE_WHEN_COPYING_END

    headers_file="headers.txt"

curl_opts=""while IFS= read -r line; do

  curl_opts+=" -H \"$line\""

done < "$headers_file"

# 動態執行cURL命令eval "curl $curl_opts https://example.com"

```這種方法為管理複雜的**cURL請求頭**提供了極大的靈活性。


目錄
公告欄
通過站內訊息即時了解luna的最新活動和功能更新。
公告
通過電子郵件聯絡我們
提示:
  • 提供您的帳號或電子郵件。
  • 提供截圖或視頻,並簡單描述問題。
  • 我們將在 24 小時內回覆您的問題。
郵件
工單中心
WhatsApp
掃描二維碼添加客服,了解產品或獲得專業技術支援。
img
+852 5643 4176
WhatsApp