文章已經收錄在 Github.com/niumoo/Java… ,更有 Java 程序員所須要掌握的核心知識,歡迎Star和指教。
歡迎關注個人公衆號,文章每週更新。html
cURL 是一個開源免費項目,主要是命令行工具 cURL 和 libcurl,cURL 能夠處理任何網絡傳輸協議,可是不涉及任何具體的數據處理。nginx
cURL 支持的通訊協議很是豐富,如 DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,MQTT,POP3,POP3S,RTMP, RTMPS,RTSP,SCP,SFTP,SMB,SMBS,SMTP,SMTPS,TELNET 以及 TFTP。查看 cURL 源代碼能夠訪問官方 Github。git
若是安裝 cURL 呢?程序員
ubuntu / Debian.github
sudo apt install curl
複製代碼
CentOS / Fedora.面試
sudo yum install curl
複製代碼
Windows.shell
若是你已經安裝了 Git,那麼 Git Bash 自帶 cURL . 若是做爲開發者你 git 都沒有,那麼只能官方手動下載。json
直接 curl 。ubuntu
$ curl http://wttr.in/
複製代碼
上面請求的示例網址是一個天氣網站,頗有意思,會根據你的請求 ip 信息返回你所在位置的天氣狀況。瀏覽器
寫這篇文字時我所在的上海正在下雨,窗外飄雨無休無止。
使用 -o
保存文件,相似於 wget 命令,好比下載 README 文本保存爲 readme.txt 文件。若是你須要自定義文件名,可使用 -O
自定使用 url 中的文件名。
$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939
複製代碼
下載文件會顯示下載狀態,如數據量大小、傳輸速度、剩餘時間等。可使用 -s
參數禁用進度表。
$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939
$
$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README -s
複製代碼
也可使用 --process-bar
參數讓進度表顯示爲進度條。
$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README --progress-bar
########################################################################################## 100.0%
複製代碼
cURL 做爲強大的代名詞,斷點續傳天然手到擒來,使用 -C -
參數便可。下面是斷點續傳下載 ubuntu20.04 鏡像的例子。
$ curl -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar
## 1.7%
^C
$ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar
### 2.4%
^C
$ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar
### 2.7%
^C
$
複製代碼
什麼?下載時不想佔用太多網速?使用 --limit-rate
限個速吧。
curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --limit-rate 100k
複製代碼
什麼?你又要從 FTP 服務器下載文件了?不慌。
curl -u user:password -O ftp://ftp_server/path/to/file/
複製代碼
使用 -i
參數顯示 Response Headers 信息。使用 -I
能夠只顯示 Response Headers 信息。
$ curl -I http://wttr.in
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 30 May 2020 09:57:03 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 8678
Connection: keep-alive
Access-Control-Allow-Origin: *
複製代碼
使用 -X
輕鬆更改請求方式。
$ curl -X GET http://wttr.in
$ curl -X POST http://wttr.in
$ curl -X PUT http://wttr.in
...
複製代碼
以傳入參數 name
值爲 未讀代碼
爲例。
Get 方式參數直接url拼接參數。
$ curl -X GET http://wttr.in?name=未讀代碼
複製代碼
Post 方式使用 --data
設置參數。
$ curl -X POST --data "name=未讀代碼" http://wttr.in
複製代碼
請求時也能夠自定義 header 參數,使用 --harder
添加。
$ curl --header "Content-Type:application/json" http://wttr.in
複製代碼
cURL 的強大遠不止此,表單提交,上傳文件內容也不在話下,只須要使用 -F
或者 -D
參數,-F
會自動加上請求頭 Content-Type: multipart/form-data
,而 -D
則是 Content-Type : application/x-www-form-urlencoded
.
好比上傳一個 protrait.jpg 圖片。
$ curl -F profile=@portrait.jpg https://example.com/upload
複製代碼
提交一個具備 name 和 age 參數的 form 表單。
curl -F name=Darcy -F age=18 https://example.com/upload
複製代碼
參數對應的內容也能夠從文件中讀取。
curl -F "content=<達西的身世.txt" https://example.com/upload
複製代碼
上傳時同時指定內容類型。
curl -F "content=<達西的身世.txt;type=text/html" https://example.com/upload
複製代碼
上傳文件的和其餘參數一塊兒。
curl -F 'file=@"localfile";filename="nameinpost"' example.com/upload
複製代碼
cURL 能夠實現多個網址的匹配,你可使用 {}
結合逗號分割來標識使用 url 中的某一段,也可使用 []
來表示範圍參數。
# 請求 www.baidu.com 和 pan.baidu.com 和 fanyi.baidu.com
$ curl http://{www,pan,fanyi}.baidu.com
# 虛構網址1-10開頭的baidu.com,而後請求
$ curl http://[1-10].baidu.com
# 虛構網址a-z開頭的baidu.com,而後請求
$ curl http://[a-z].baidu.com
複製代碼
這種方式有時候仍是頗有用處的,好比說你發現了某個網站的 url 規律。
請求時使用 -c
參數存儲響應的 cookie,使用 -b
能夠在請求時帶上指定 cookie.
$ curl -c wdbyte_cookies http://www.wdbyte.com
$ curl -b wdbyte_cookes http://www.wdbyte.com
複製代碼
以上就是 cURL 的常見用法了,最後告訴你一個小技巧,Chrome、Firefox 等瀏覽器能夠直接拷貝請求爲 cURL 語句。保存以後下次請求測試很是方便。
參考資料
最後的話
文章已經收錄在 Github.com/niumoo/Java… ,歡迎Star和指教。更有一線大廠面試點,Java程序員須要掌握的核心知識等文章,也整理了不少個人文字,歡迎 Star 和完善,但願咱們一塊兒變得優秀。
文章有幫助能夠點個「贊」或「分享」,都是支持,我都喜歡!
文章每週持續更新,要實時關注我更新的文章以及分享的乾貨,能夠關注「 未讀代碼 」公衆號或者個人博客。