可能是東半球最好的 Curl 學習指南,強烈建議收藏!

来源:https://www.cnblogs.com/hi-linux/archive/2019/09/24/11580054.html
-Advertisement-
Play Games

本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi Linux。 「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第一 ...


file


本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi-Linux。

「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第一時間獲取最新技術文章,歡迎關註我們!

公眾號作者 Mike,一個月薪 3000 的雜工。從事 IT 相關工作 15+ 年,熱衷於互聯網技術領域,認同開源文化,對運維相關技術有自己獨特的見解。很願意將自己積累的經驗、心得、技能與大家分享交流,篇篇乾貨不要錯過喲。如果你想聯繫到我,可關註公眾號獲取相關信息。


簡介

curl 是常用的命令行工具,用來請求 Web 伺服器。它的名字就是客戶端(client)的 URL 工具的意思。

它的功能非常強大,命令行參數多達幾十種。如果熟練的話,完全可以取代 Postman 這一類的圖形界面工具。

使用實例

本文介紹它的主要命令行參數,作為日常的參考,方便查閱。內容主要翻譯自 《curl cookbook》。為了節約篇幅,下麵的例子不包括運行時的輸出,初學者可以先看我以前寫的 《curl 初學者教程》。

不帶有任何參數時,curl 就是發出 GET 請求。

$ curl https://www.example.com

上面命令向 www.example.com 發出 GET 請求,伺服器返回的內容會在命令行輸出。

-A

-A 參數指定客戶端的用戶代理標頭,即 User-Agentcurl 的預設用戶代理字元串是 curl/[version]

$ curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com

上面命令將 User-Agent 改成 Chrome 瀏覽器。

$ curl -A '' https://google.com

上面命令會移除 User-Agent 標頭。你也可以通過 -H 參數直接指定標頭,更改 User-Agent

$ curl -H 'User-Agent: php/1.0' https://google.com

-b

-b 參數用來向伺服器發送 Cookie

$ curl -b 'foo=bar' https://google.com

上面命令會生成一個標頭 Cookie: foo=bar,向伺服器發送一個名為 foo、值為 barCookie

$ curl -b 'foo1=bar' -b 'foo2=baz' https://google.com

上面命令發送兩個 Cookie

$ curl -b cookies.txt https://www.google.com

上面命令讀取本地文件 cookies.txt,裡面是伺服器設置的 Cookie(參見 -c 參數),將其發送到伺服器。

-c

-c 參數將伺服器設置的 Cookie 寫入一個文件。

$ curl -c cookies.txt https://www.google.com

上面命令將伺服器的 HTTP 回應所設置 Cookie 寫入文本文件 cookies.txt

-d

-d 參數用於發送 POST 請求的數據體。

$ curl -d'login=emma&password=123'-X POST https://google.com/login
# 或者
$ curl -d 'login=emma' -d 'password=123' -X POST  https://google.com/login

使用 -d 參數以後,HTTP 請求會自動加上標頭 Content-Type : application/x-www-form-urlencoded。並且會自動將請求轉為 POST 方法,因此可以省略 -X POST

-d 參數可以讀取本地文本文件的數據,向伺服器發送。

$ curl -d '@data.txt' https://google.com/login

上面命令讀取 data.txt 文件的內容,作為數據體向伺服器發送。

--data-urlencode

--data-urlencode 參數等同於 -d,發送 POST 請求的數據體,區別在於會自動將發送的數據進行 URL 編碼。

$ curl --data-urlencode 'comment=hello world' https://google.com/login

上面代碼中,發送的數據 hello world 之間有一個空格,需要進行 URL 編碼。

-e

-e 參數用來設置 HTTP 的標頭 Referer,表示請求的來源。

$ curl -e 'https://google.com?q=example' https://www.example.com

上面命令將 Referer 標頭設為 https://google.com?q=example

-H 參數可以通過直接添加標頭 Referer,達到同樣效果。

$ curl -H 'Referer: https://google.com?q=example' https://www.example.com

-F

-F 參數用來向伺服器上傳二進位文件。

$ curl -F '[email protected]' https://google.com/profile

上面命令會給 HTTP 請求加上標頭 Content-Type: multipart/form-data,然後將文件 photo.png 作為 file 欄位上傳。

-F 參數可以指定 MIME 類型。

$ curl -F '[email protected];type=image/png' https://google.com/profile

上面命令指定 MIME 類型為 image/png,否則 curl 會把 MIME 類型設為 application/octet-stream

-F 參數也可以指定文件名。

$ curl -F '[email protected];filename=me.png' https://google.com/profile

上面命令中,原始文件名為 photo.png,但是伺服器接收到的文件名為 me.png

-G

-G 參數用來構造 URL 的查詢字元串。

$ curl -G -d 'q=kitties' -d 'count=20' https://google.com/search

上面命令會發出一個 GET 請求,實際請求的 URL 為 https://google.com/search?q=kitties&count=20。如果省略 --G,會發出一個 POST 請求。

如果數據需要 URL 編碼,可以結合 --data--urlencode 參數。

$ curl -G --data-urlencode 'comment=hello world' https://www.example.com

-H

-H 參數添加 HTTP 請求的標頭。

$ curl -H 'Accept-Language: en-US' https://google.com

上面命令添加 HTTP 標頭 Accept-Language: en-US

$ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com

上面命令添加兩個 HTTP 標頭。

$ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login

上面命令添加 HTTP 請求的標頭是 Content-Type: application/json,然後用 -d 參數發送 JSON 數據。

-i

-i 參數列印出伺服器回應的 HTTP 標頭。

$ curl -i https://www.example.com

上面命令收到伺服器回應後,先輸出伺服器回應的標頭,然後空一行,再輸出網頁的源碼。

-I

-I 參數向伺服器發出 HEAD 請求,然會將伺服器返回的 HTTP 標頭列印出來。

$ curl -I https://www.example.com

上面命令輸出伺服器對 HEAD 請求的回應。

--head 參數等同於 -I

$ curl --head https://www.example.com

-k

-k 參數指定跳過 SSL 檢測。

$ curl -k https://www.example.com

上面命令不會檢查伺服器的 SSL 證書是否正確。

-L

-L 參數會讓 HTTP 請求跟隨伺服器的重定向。curl 預設不跟隨重定向。

$ curl -L -d 'tweet=hi' https://api.twitter.com/tweet

--limit-rate

--limit-rate 用來限制 HTTP 請求和回應的帶寬,模擬慢網速的環境。

$ curl --limit-rate 200k https://google.com

上面命令將帶寬限制在每秒 200K 位元組。

-o

-o 參數將伺服器的回應保存成文件,等同於 wget 命令。

$ curl -o example.html https://www.example.com

上面命令將 www.example.com 保存成 example.html

-O

-O 參數將伺服器回應保存成文件,並將 URL 的最後部分當作文件名。

$ curl -O https://www.example.com/foo/bar.html

上面命令將伺服器回應保存成文件,文件名為 bar.html

-s

-s 參數將不輸出錯誤和進度信息。

$ curl -s https://www.example.com

上面命令一旦發生錯誤,不會顯示錯誤信息。不發生錯誤的話,會正常顯示運行結果。

如果想讓 curl 不產生任何輸出,可以使用下麵的命令。

$ curl -s -o /dev/null https://google.com

-S

-S 參數指定只輸出錯誤信息,通常與 -s 一起使用。

$ curl -s -o /dev/null https://google.com

上面命令沒有任何輸出,除非發生錯誤。

-u

-u 參數用來設置伺服器認證的用戶名和密碼。

$ curl -u 'bob:12345' https://google.com/login

上面命令設置用戶名為 bob,密碼為 12345,然後將其轉為 HTTP 標頭 Authorization: Basic Ym9iOjEyMzQ1

curl 能夠識別 URL 裡面的用戶名和密碼。

$ curl https://bob:[email protected]/login

上面命令能夠識別 URL 裡面的用戶名和密碼,將其轉為上個例子裡面的 HTTP 標頭。

$ curl -u 'bob' https://google.com/login

上面命令只設置了用戶名,執行後,curl 會提示用戶輸入密碼。

-v

-v 參數輸出通信的整個過程,用於調試。

$ curl -v https://www.example.com

--trace 參數也可以用於調試,還會輸出原始的二進位數據。

$ curl --trace - https://www.example.com

-x

-x 參數指定 HTTP 請求的代理。

$ curl -x socks5://james:[email protected]:8080 https://www.example.com

上面命令指定 HTTP 請求通過 myproxy.com:8080socks5 代理髮出。

如果沒有指定代理協議,預設為 HTTP

$ curl -x james:[email protected]:8080 https://www.example.com

上面命令中,請求的代理使用 HTTP 協議。

-X

-X 參數指定 HTTP 請求的方法。

$ curl -X POST https://www.example.com

上面命令對 https://www.example.com 發出 POST 請求。

參考鏈接

  • Curl Cookbook

來源:阮一峰的網路日誌

原文:http://t.cn/AiRQUQlz

題圖:來自谷歌圖片搜索

版權:本文版權歸原作者所有

投稿:歡迎投稿,郵箱: [email protected]




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系統:windows 需求:測試多台PC輸出三個網站並行ping、tracert結果,多台PC同時進行。 說明:以www.baidu.com、www.sina.com.cn、www.tencent.com為例。 創建ping-tracer、www.baidu.com、www.sina.com.cn、 ...
  • 1.列印九九乘法口訣 1 for i in `seq 9` ;do 2 for j in `seq 9` ;do 3 if [ $i -ge $j ];then 4 let sum=${i}*${j} 5 echo -e "${i}x${j}=$sum\t\c" 6 fi 7 done 8 echo ...
  • 作者:小啊博 QQ:762641008 轉載請聲明:https://www.cnblogs.com/-bobo 1.安裝操作系統 開啟虛擬機後會出現以下界面 選擇第一項,安裝直接CentOS 7,回車,進入下麵的界面 2.選擇語言 3.軟體選擇 對於初學者-GUI的伺服器,同時把“開發工具”相關的軟 ...
  • 一、軟硬體準備 作者:小啊博 QQ:762641008 轉載請聲明;https://www.cnblogs.com/-bobo 1.準備Centos7鏡像 軟體:推薦使用VMwear,我用的是VMwear 12 鏡像:CentOS7 ,如果沒有鏡像可以在官網下載 :http://isoredirec ...
  • 在Makefile中,寫在同一行的代碼就相當於是在Linux中的同一行命令行寫的代碼一樣,是一次性執行的;如程式中如下編寫Makefile代碼(請註意,兩個命令之間應該使用分號“;”來進行分隔): 執行的結果是: 如果把相同的代碼分開兩行來編寫,如下: 執行的結果是: 由以上結果可以看到,通過pwd ...
  • Linux 文件/目錄操作詳解 [TOC] 初識Linux   知道Linux的人都知道,它的命令行十分的豐富,很多人不學他的原因也就是命令行的不友好,需要背誦命令行,比起Windows的圖形界面枯燥很多,但其實如果真正想學到底層的東西,還是學習一Linux比較好,就像學習C語言 ...
  • 我們難免大意忘掉自己的root密碼,以下操作實現破解Centos 7密碼 ...
  • 本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi Linux。 「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...