curl 命令使用筆記
目錄
- 一、curl 簡介
- 二、基本語法
- 三、常用選項説明
- 四、核心使用示例
- 1. GET 請求
- 2. POST 請求
- (1)提交表單數據(application/x-www-form-urlencoded)
- (2)提交 JSON 數據
- 3. 文件上傳(multipart/form-data)
- 4. Cookie 相關操作
- 5. 自定義請求頭
參考資料地址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"