curl,全稱CommandLine URL 或 CommandLine Uniform Resource Locator,顧名思義,curl指令是在指令行方式下工作,利用URL的文法進行資料的傳輸或者檔案的傳輸。
這個指令行工具現在多用于Unix和Linux作業系統,是一個開源的工具,功能十分強大。
下面是crul的官方網站,我們可以該網站擷取該工具的最新版本,還有最全面的使用方法。
https://curl.haxx.se/
從官網我們可以知道,該工具支援以下30多種類型的傳輸方式,這當中包含多種協定。
DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet and TFTP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, HTTP/2, cookies, user+password authentication (Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos), file transfer resume, proxy tunneling
最常使用的有FILE、FTP、HTTP、HTTPS等協定。
對于程式員在說,在我們開發遠端服務的時候,比如http傳輸,SOCKET等網絡程式設計時,這個工具能非常友善的作為你的驗證工具和測試工具。
比如下面是最簡單的用法,通過這種方式擷取一個頁面。我輸入的www.baidu.com甚至還不是一個完整的URL,因為沒有指明所用的協定,curl智能地進行了選擇。
運作後,傳回的是一個百度首頁的HTML代碼。
curl www.baidu.com

本文主要還是介紹curl的一般用法,詳細用法請參閱官網。
curl的用法跟一般的linux/Unix指令無異,一般文法如下。
crul -[選項] [URL]
1. -v 選項,--verbose,指定該選項後,可以跟蹤URL的連接配接資訊。我們可以根據這個選項看看curl是怎麼工作的。
比如剛剛示範的那個百度連結,我們加入-v選項,就可以看看它是怎麼工作的。
加上選項後傳回的資訊,包括很多重要資訊:
域名解釋過程:我們可以得到真正連接配接的IP位址和端口
請求頭資訊:其中有使用的協定(HTTP),協定的請求方式(GET)
回應頭資訊:包含狀态碼(200),内容格式(text/html),内容長度等
curl -v www.baidu.com
2.-i 選項,--include,把回應的頭資訊包含在内,跟-v大同小異,是-v的子集。
curl -i www.baidu.com
3.-I (大寫i)選項,--head,隻顯示傳回的頭資訊,與-v大同小異,是-v的子集。
curl -I www.baidu.com
4. -u 選項,帶使用者驗證的連接配接。可以通路或擷取帶使用者驗證的URL。
curl -u username:password ftp://127.0.0.1/hello.txt
curl -u username ftp://127.0.0.1/hello.txt
curl -u username:password https://127.0.0.1/
5. -d 選項,帶請求參數的連接配接。比如下面的URL,user=xiaoruan&age=22就是所帶的參數。crul可以帶請求參數。
http://127.0.0.1/index.html?user=xiaoruan&age=22
curl -d 'user=xiaoruan&age=22' http://127.0.0.1/index.html
6. -X 選項,指定請求方式,我們隻能URL可以有多種請求方式,最常見的是GET和POST,但請求的方式,包括GET、PUT、POST、DELETE四種方式。
這四種請求方式,對于在做RESTFUL接口開發和測試的人來說,非常友善。curl的用法如下: