使用curl命令的技巧
curl
?是常用的命令行工具,用來(lái)請(qǐng)求?Web
?服務(wù)器。它的名字就是客戶端的?URL
?工具的意思。它的功能非常強(qiáng)大,命令行參數(shù)多達(dá)幾十種。如果熟練的話,完全可以取代?Postman
?這一類的圖形界面工具。
本文轉(zhuǎn)自?curl 的用法指南

使用curl命令的技巧
OpenSource: 總結(jié)的快捷鍵使用文檔
使用curl命令的技巧
本文介紹它的主要命令行參數(shù),作為日常的參考,方便查閱。不帶有任何參數(shù)時(shí),curl
?就是發(fā)出?GET
?請(qǐng)求。
# 向www.example.com發(fā)出 GET 請(qǐng)求$ curl https://www.example.com
1. -A 用戶代理
也可以通過(guò)?
-H
?參數(shù)直接指定標(biāo)頭更改?User-Agent
?配置
通過(guò)?
-A
?參數(shù)指定客戶端的用戶代理標(biāo)頭(User-Agent
),而在默認(rèn)的情況下?curl
?的默認(rèn)用戶代理字符串是?curl/[version]
,其中?version
?表示對(duì)應(yīng)的版本號(hào)。
# 將User-Agent改成Chrome瀏覽器$ 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標(biāo)頭$ curl -A '' https://google.com# 通過(guò)-H參數(shù)直接指定標(biāo)頭更改User-Agent配置$ curl -H 'User-Agent: php/1.0' https://google.com
2. -b 發(fā)送 Cookie 信息
通過(guò)?
-b
?參數(shù)用來(lái)向服務(wù)器發(fā)送自定義的?Cookie
?信息。
# Cookie: foo=bar# 會(huì)生成一個(gè)標(biāo)頭向服務(wù)器發(fā)送一個(gè)名為foo,且值為bar的Cookie信息$ curl -b 'foo=bar' https://google.com# 發(fā)送兩個(gè)Cookie信息$ curl -b 'foo1=bar' -b 'foo2=baz' https://google.com# 讀取cookies.txt本地文件的Cookie信息,并將其發(fā)送到服務(wù)器$ curl -b cookies.txt https://www.google.com
3. -c 將 Cookie 寫(xiě)入文件
通過(guò)?
-c
?參數(shù)將服務(wù)器設(shè)置的?Cookie
?寫(xiě)入一個(gè)文件
# 將服務(wù)器的HTTP回應(yīng)所設(shè)置Cookie寫(xiě)入cookies.txt文本文件$ curl -c cookies.txt https://www.google.com
4. -d 發(fā)送 POST 請(qǐng)求的數(shù)據(jù)體
--data-urlencode
等同于-d 參數(shù),發(fā)送 POST 請(qǐng)求的數(shù)據(jù)體,區(qū)別在于會(huì)自動(dòng)將發(fā)送的數(shù)據(jù)進(jìn)行 URL 編碼
通過(guò)?
-d
?參數(shù)用于發(fā)送?POST
?請(qǐng)求的數(shù)據(jù)體。使用?-d
?參數(shù)以后,HTTP
?請(qǐng)求會(huì)自動(dòng)加上標(biāo)頭?Content-Type: application/x-www-form-urlencoded
。并且會(huì)自動(dòng)將請(qǐng)求轉(zhuǎn)為?POST
?方法,因此可以省略?-X POST
?參數(shù)。
# 發(fā)送POST請(qǐng)求的數(shù)據(jù)體$ 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# 讀取data.txt文件的內(nèi)容,作為數(shù)據(jù)體向服務(wù)器發(fā)送$ curl -d '@data.txt' https://google.com/login
# 發(fā)送的數(shù)據(jù)hello world之間有一個(gè)空格,需要進(jìn)行URL編碼$ curl --data-urlencode 'comment=hello world' https://google.com/login
5. -e 設(shè)置 HTTP 的標(biāo)頭 Referer 字段
通過(guò)?
-e
?參數(shù)用來(lái)設(shè)置?HTTP
?的標(biāo)頭?Referer
,表示請(qǐng)求的來(lái)源。
# 將Referer標(biāo)頭設(shè)為https://google.com?q=example$ curl -e 'https://google.com?q=example' https://www.example.com# 通過(guò)-H參數(shù)可以通過(guò)直接添加標(biāo)頭Referer達(dá)到同樣效果$ curl -H 'Referer: https://google.com?q=example' https://www.example.com
6. -F 向服務(wù)器上傳二進(jìn)制文件
通過(guò)?
-F
?參數(shù)用來(lái)向服務(wù)器上傳二進(jìn)制文件。
# 下面命令會(huì)給HTTP請(qǐng)求加上標(biāo)頭Content-Type: multipart/form-data# 然后將文件photo.png作為file字段上傳,類似于postman中的上傳文件一樣$ curl -F 'file=@photo.png' https://google.com/profile
通過(guò)?
-F
?參數(shù)可以指定?MIME
?類型。
# 指定MIME類型為image/png# 否則curl會(huì)把MIME類型設(shè)為application/octet-stream$ curl -F 'file=@photo.png;type=image/png' https://google.com/profile
通過(guò)?
-F
?參數(shù)也可以指定文件名。
# 原始文件名為photo.png,但是服務(wù)器接收到的文件名為me.png$ curl -F 'file=@photo.png;filename=me.png' https://google.com/profile
7. -G 構(gòu)造 URL 的查詢字符串
通過(guò)?
-G
?參數(shù)用來(lái)構(gòu)造?URL
?的查詢字符串。
# 下面命令會(huì)發(fā)出一個(gè)GET請(qǐng)求,如果省略-G參數(shù)會(huì)發(fā)出一個(gè)POST請(qǐng)求# 實(shí)際請(qǐng)求的URL地址為 => https://google.com/search?q=kitties&count=20$ curl -G -d 'q=kitties' -d 'count=20' https://google.com/search# 如果數(shù)據(jù)需要URL編碼,可以結(jié)合--data--urlencode參數(shù)$ curl -G --data-urlencode 'comment=hello world' https://www.example.com
8. -H 添加 HTTP 請(qǐng)求的標(biāo)頭
通過(guò)?
-H
?參數(shù)添加?HTTP
?請(qǐng)求的標(biāo)頭。
# 添加HTTP標(biāo)頭 Accept-Language: en-US$ curl -H 'Accept-Language: en-US' https://google.com# 添加兩個(gè)HTTP標(biāo)頭$ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com# 添加 HTTP 請(qǐng)求的標(biāo)頭是Content-Type: application/json# 然后通過(guò)-d參數(shù)發(fā)送JSON數(shù)據(jù)發(fā)送到服務(wù)器上面$ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login
9. -i 打印服務(wù)器回應(yīng)的 HTTP 標(biāo)頭
通過(guò)?
-i
?參數(shù)打印出服務(wù)器回應(yīng)的?HTTP
?標(biāo)頭。
# 下面命令收到服務(wù)器回應(yīng)后,先輸出服務(wù)器回應(yīng)的標(biāo)頭,然后空一行,再輸出網(wǎng)頁(yè)的源碼$ curl -i https://www.example.com
10. -I 打印服務(wù)器回應(yīng)的 HEAD 標(biāo)頭
通過(guò)?
-I
?參數(shù)向服務(wù)器發(fā)出?HEAD
?請(qǐng)求,然會(huì)將服務(wù)器返回的?HTTP
?標(biāo)頭打印出來(lái)。
# 輸出服務(wù)器對(duì)HEAD請(qǐng)求的回應(yīng)$ curl -I https://www.example.com# --head參數(shù)等同于-I參數(shù)$ curl --head https://www.example.com
11. -k 跳過(guò) SSL 檢測(cè)
通過(guò)?
-k
?參數(shù)指定跳過(guò)?SSL
?檢測(cè)。
# 不會(huì)檢查服務(wù)器的SSL證書(shū)是否正確$ curl -k https://www.example.com
12. -L 跟隨服務(wù)器的重定向
通過(guò)?
-L
?參數(shù)會(huì)讓?HTTP
?請(qǐng)求跟隨服務(wù)器的重定向,而?curl
?默認(rèn)不跟隨重定向。
# 請(qǐng)求跟隨服務(wù)器的重定向$ curl -L -d 'tweet=hi' https://api.twitter.com/tweet
13. –limit-rate 限制請(qǐng)求和回應(yīng)的帶寬
通過(guò)?
--limit-rate
?用來(lái)限制?HTTP
?請(qǐng)求和回應(yīng)的帶寬,模擬慢網(wǎng)速的環(huán)境。
# 將帶寬限制在每秒200K字節(jié)$ curl --limit-rate 200k https://google.com
14. -o 將服務(wù)器的回應(yīng)保存成文件
通過(guò)?
-o
?參數(shù)將服務(wù)器的回應(yīng)保存成文件,等同于?wget
?命令。
# 將www.example.com保存成example.html文件$ curl -o example.html https://www.example.com
15. -O 將服務(wù)器的回應(yīng)保存成文件
通過(guò)?
-O
?參數(shù)將服務(wù)器回應(yīng)保存成文件,并將?URL
?的最后部分當(dāng)作文件名。
# 將服務(wù)器回應(yīng)保存成文件,文件名為bar.html$ curl -O https://www.example.com/foo/bar.html
16. -s 不輸出錯(cuò)誤和進(jìn)度信息
通過(guò)?
-s
?參數(shù)將不輸出錯(cuò)誤和進(jìn)度信息。
# 一旦發(fā)生錯(cuò)誤,不會(huì)顯示錯(cuò)誤信息。不發(fā)生錯(cuò)誤的話,會(huì)正常顯示運(yùn)行結(jié)果$ curl -s https://www.example.com# 想讓curl不產(chǎn)生任何輸出,可以使用下面的命令$ curl -s -o /dev/null https://google.com
17. -S 只輸出錯(cuò)誤信息
通過(guò)?
-S
?參數(shù)指定只輸出錯(cuò)誤信息,通常與?-s
?一起使用。
# 沒(méi)有任何輸出,除非發(fā)生錯(cuò)誤$ curl -s -o /dev/null https://google.com
18. -u 設(shè)置認(rèn)證的用戶名和密碼
通過(guò)?
-u
?參數(shù)用來(lái)設(shè)置服務(wù)器認(rèn)證的用戶名和密碼。
# 設(shè)置用戶名為bob,密碼為12345# 然后將其轉(zhuǎn)為HTTP標(biāo)頭 Authorization: Basic Ym9iOjEyMzQ1$ curl -u 'bob:12345' https://google.com/login# curl 能夠識(shí)別URL里面的用戶名和密碼$ curl https://bob:12345@google.com/login# 只設(shè)置了用戶名,執(zhí)行后curl會(huì)提示用戶輸入密碼$ curl -u 'bob' https://google.com/login
19. -v 打印調(diào)試信息
通過(guò)?
-v
?參數(shù)輸出通信的整個(gè)過(guò)程,用于調(diào)試。
# 打印調(diào)試信息$ curl -v https://www.example.com# --trace參數(shù)也可以用于調(diào)試,還會(huì)輸出原始的二進(jìn)制數(shù)據(jù)。$ curl --trace - https://www.example.com
20. -x 設(shè)置請(qǐng)求代理
通過(guò)?
-x
?參數(shù)指定?HTTP
?請(qǐng)求的代理。
# 指定HTTP請(qǐng)求通過(guò)myproxy.com:8080的socks5代理發(fā)出$ curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com# 如果沒(méi)有指定代理協(xié)議,默認(rèn)為 HTTP$ curl -x james:cats@myproxy.com:8080 https://www.example.com
21. -X 指定請(qǐng)求的方法
通過(guò)?
-X
?參數(shù)指定?HTTP
?請(qǐng)求的方法。
# 對(duì)https://www.example.com發(fā)出POST請(qǐng)求$ curl -X POST https://www.example.com
?文章作者:?Escape
?文章鏈接:?https://www.escapelife.site/posts/2e4a909a.html