curl 命令使用筆記

目錄

  • 一、curl 簡介
  • 二、基本語法
  • 三、常用選項説明
  • 四、核心使用示例
  • 1. GET 請求
  • 2. POST 請求
  • (1)提交表單數據(application/x-www-form-urlencoded)
  • (2)提交 JSON 數據
  • 3. 文件上傳(multipart/form-data)
  • 4. Cookie 相關操作
  • 5. 自定義請求頭
6. 設置請求來源(Referer)

參考資料地址1: 官網

參考資料地址2: 官方文檔

參考資料地址3: curl命令詳解

一、curl 簡介

curl 是一款功能強大的命令行工具,用於在網絡上進行數據傳輸。它支持多種協議,如 HTTP、HTTPS、FTP、SFTP 等,常被用於測試 API、下載文件、模擬用户請求等場景。

二、基本語法

curl [選項] [URL]

三、常用選項説明

選項

完整寫法

功能説明

-a

--append

上傳文件時,將本地文件內容附加到目標文件末尾,而不是覆蓋。

-A

--user-agent

設置發送給服務器的 User-Agent 請求頭,用於模擬不同的瀏覽器或客户端。

-b

--cookie

向服務器發送 Cookie。參數可以是字符串("name=value; name2=value2")或包含 Cookie 的文件名。

-c

--cookie-jar

將服務器返回的 Set-Cookie 頭信息保存到指定的文件中。

-d

--data

以 POST 方式發送數據,適用於 application/x-www-form-urlencoded 類型的表單提交。

-e

--referer

設置請求頭 Referer,告訴服務器該請求是從哪個頁面鏈接過來的。

-F

--form

模擬 multipart/form-data 類型的表單提交,常用於上傳文件。

--form-string

與 -F 類似,但值始終被視為純文本字符串,不會進行文件上傳。

-g

--globoff

禁用 URL 中 {和} 以及 [ 和 ] 的特殊含義,防止它們被解析為序列或範圍。

-G

--get

將 -d 或 --data-urlencode 指定的數據附加到 URL 後面,並以 GET 方式請求。

-H

--header

自定義 HTTP 請求頭。可以多次使用該選項來添加多個頭信息。

-i

--include

在輸出中包含 HTTP 響應頭信息。

-I

--head

只請求頁面的 HTTP 響應頭信息,不獲取頁面內容(即 HEAD 請求)。

--ignore-content-length

忽略響應頭中的 Content-Length 字段,這在某些情況下可以避免下載中斷。

-l

--list-only

對於 FTP 等協議,僅列出目錄內容而不下載文件。在 HTTP 請求中,效果不明顯,通常與其他選項結合使用。

-o

--output

將下載的內容保存到指定的文件中,而不是輸出到終端。

-O

--remote-name

將下載的內容保存到文件中,文件名從 URL 中推斷(即使用遠程文件的原始名稱)。

-x

--proxy

使用指定的代理服務器(如 http://user:pass@host:port)進行連接。

-X

--request

指定 HTTP 請求方法(如 GET, POST, PUT, DELETE, PATCH 等)。

-v

--verbose

顯示詳細的請求和響應過程,包括 DNS 解析、TCP 連接、SSL 握手、請求頭和響應頭的詳細信息,便於調試。

-w

--write-out

請求完成後,按照指定的格式輸出額外的信息,如響應時間、HTTP 狀態碼等。

四、核心使用示例

1. GET 請求

# 1. 基礎 GET 請求,將響應體輸出到終端
curl "http://www.example.com"

# 2. 顯示響應頭(-i)和響應體
curl -i "http://www.example.com"

# 3. 僅顯示響應頭(-I)
curl -I "http://www.example.com"

# 4. 顯示請求全過程的詳細調試信息(-v)
curl -v "http://www.example.com"

# 5. 將響應內容保存到文件(-o)
curl -o "example.html" "http://www.example.com"

# 6. 以 GET 方式發送數據(-G 配合 -d)
curl -G -d "q=keyword" -d "page=1" "https://example.com/search"

2. POST 請求

(1)提交表單數據(application/x-www-form-urlencoded

# 1. 使用 -d 發送 POST 數據
curl -d "param1=value1¶m2=value2" -X POST "http://www.example.com/login"

# 2. 多次使用 -d 添加多個參數
curl -d 'login=emma' -d 'password=123' -X POST "https://example.com/login"

# 3. 使用 --data-urlencode 自動編碼特殊字符
curl --data-urlencode 'comment=hello world & other things' "https://example.com/submit"

(2)提交 JSON 數據

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "13888888888",
    "password": "test"
  }' \
  "http://example.com/apis/users.json"

3. 文件上傳(multipart/form-data

# 1. 基礎文件上傳
curl -F 'file=@/path/to/photo.png' "https://example.com/profile"

# 2. 上傳文件並指定 MIME 類型
curl -F 'file=@/path/to/photo.png;type=image/png' "https://example.com/profile"

# 3. 上傳文件並指定服務器接收的文件名
curl -F 'file=@/path/to/photo.png;filename=avatar.png' "https://example.com/profile"

4. Cookie 相關操作

# 1. 發送 Cookie 到服務器(-b)
curl -b "user=root;pass=123456" "http://example.com/dashboard"

# 2. 從文件讀取 Cookie 併發送(-b)
curl -b "cookies.txt" "http://example.com/dashboard"

# 3. 將服務器返回的 Cookie 保存到文件(-c)
curl -c "cookies.txt" "http://example.com/login"

5. 自定義請求頭

# 1. 添加單個請求頭
curl -H "Accept-Language: en-US" "https://example.com"

# 2. 添加多個請求頭
curl -H "Accept-Language: en-US" -H "Secret-Token: abc123" "https://example.com"

# 3. 模擬瀏覽器 User-Agent (-A)
curl -A "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"

6. 設置請求來源(Referer)

# 使用 -e 或 -H "Referer: ..."
curl -e "https://google.com" "https://example.com/target-page"
# 等效於
# curl -H "Referer: https://google.com" "https://example.com/target-page"