Curl 用法解析
簡介
Curl 是一個強大的命令行工具,主要用于從服務器發送 HTTP 請求并獲取數據。它廣泛應用于調試 RESTful API、文件上傳下載、模擬用戶交互等多種場景。下面是一些基本用法及常見參數的分析:
基礎用法
curl [options] [URL]
其中最基本的形式就是指定一個 URL,curl 會向該 URL 發送一個 HTTP GET 請求并顯示響應內容。
發送 GET 請求
curl https://example.com
這個命令會向 https://example.com
發送 GET 請求,并打印服務器返回的響應內容。
選項詳解
-
-X, --request <METHOD>
:指定 HTTP 方法,如POST
、PUT
、DELETE
等。??curl -X POST https://api.example.com/data
-
-d, --data <DATA>
:發送 POST 數據。例如,發送 JSON 數據:??curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' https://api.example.com/data
-
-H, --header <HEADER>
:添加 HTTP 頭信息。例如:??curl -H "Authorization: Bearer token_value" https://example.com
-
-o, --output <FILE>
:將響應內容保存到文件中,而不是輸出到屏幕。curl -o output.html https://example.com
-
-I, --head
:只獲取 HTTP 頭部信息,不下載響應主體內容。??curl -I https://example.com
-
-v, --verbose
:詳細模式,展示請求和響應的所有詳細信息,包括頭信息、SSL 證書交換過程等。curl -v https://example.com
-
-L, --location
:自動跟隨服務器返回的 Location 頭自動重定向。??curl -L https://example.com/original-url
如果
https://example.com/original-url
返回一個 3XX 重定向響應,curl 會自動跟隨重定向的 URL,并顯示最終的目標頁面內容。 -
-w, --write-out <FORMAT>
:自定義輸出格式,可以用于統計請求的耗時等信息。curl -w "%{http_code} %{time_total}\n" -o /dev/null https://example.com
這個命令會發出一個 GET 請求到
https://example.com
,但不顯示響應內容(通過-o /dev/null
實現)。-w
參數后面的%{http_code}
表示輸出 HTTP 響應碼,%{time_total}
表示輸出請求總耗時(包括 DNS 解析、TCP 連接、TLS 握手以及實際傳輸時間)。 -
-u, --user <USER[:PASSWORD]>
:提供 HTTP 基本認證信息。curl -u myusername:mypassword https://example.com/protected-resource
這個命令會在請求
https://example.com/protected-resource
時附帶上 HTTP Basic Authentication 頭,其中用戶名為myusername
,密碼為mypassword
。 -
-k, --insecure
:跳過服務器證書驗證(僅在測試環境中謹慎使用)。curl -k https://self-signed.example.com
在訪問自簽名證書或者證書不受信任的服務器時,可以使用
-k
參數跳過證書驗證。但在生產環境中強烈不建議這樣做,因為它會導致安全風險,容易受到中間人攻擊。僅在測試或調試環境中臨時使用。
發送 POST 表單
# POST 提交 表單數據
curl -F "username=hello" \-F "password=123456" \-F "head_image=@filepath.jpg" \http://localhost/register
文件上傳
curl -X PUT -T file.txt https://server/upload/path
這個命令用于上傳 file.txt
文件到指定的服務器路徑。
線上排查(檢查網絡)
容器內運行指令,需要
bash
指令進入命令行窗口
ping(判斷網絡)
- 功能:ping 命令通過發送 ICMP 回顯請求報文,并監聽對方返回的 ICMP 回顯應答報文,來測試兩個網絡節點間的連通性。它可以用來判斷網絡層的可達性和估算網絡延遲。
- 用途:
- 驗證遠程主機是否在線和可訪問。
- 測試網絡連接的速度和穩定性,通過計算并報告往返時間(Round-Trip Time, RTT)。
- 解析域名以獲取其對應的 IP 地址。
telnet(判斷端口)
- 功能:telnet 是基于 TCP 協議的遠程登錄和通信工具,允許用戶建立與遠程主機上的指定端口的連接。
- 格式:例如,telnet 127.0.0.1 1521 – 測試主機(127.0.0.1)的 1521 端口是否打開。
- 用途:
- 遠程連接到提供 telnet 服務的主機,進行命令行交互式的管理操作。
- 測試網絡服務端口是否開放:通過嘗試連接到遠程主機的特定端口(如 80 端口用于 HTTP 服務,22 端口用于 SSH 服務),可以驗證該端口是否接受連接請求,從而確認服務器的服務狀態。
- 驗證防火墻規則設置是否正確:如果 telnet 到某個端口失敗,則可能是由于防火墻阻止了連接,或者是目標主機沒有運行相應的服務。
總結來說,在線上排查時,
ping
主要用來快速驗證網絡連通性和響應速度,而telnet
則更側重于檢查特定網絡服務的可用性,尤其是基于 TCP 協議的服務端口。
用法示例
# 寫法一
curl -X POST --location "http://localhost:9094/user/page" \
-H "Content-Type: application/json" \
-H "x-user-id: 1" \
-d '{"current": 1,"date": 20240320,"size": 20}'# 寫法二(可省略 -X POST,因為 -d 已經暗示了這是一個 POST 請求)
curl -X POST -H "Content-Type: application/json" \-d '{"current": 1, "date": 20240320, "size": 10}' \http://localhost:9094/user/page
curl
有一個特性:
- 當
-d
選項被使用時,如果未明確指定-X
或--request
,它會默認使用POST
方法。這是因為-d
的存在通常意味著你想向服務器發送數據,這與POST
請求的語義相匹配。
學習參考
- telnet ip 端口 命令_檢測網絡是否正常(ping,Telnet,tracert以及tnsping)-CSDN博客
- curl命令用法-CSDN博客
- curl - Tutorial