咱們在客戶端開發過程當中總免不了和後端進行api對接,有時候須要對返回的數據格式進行調試,有時候每次運行客戶端來發送請求,這個未免效率過低,這裏就來介紹一個好用的工具--curl。html
curl是一個向服務器傳輸數據的工具,它支持http、https、ftp、ftps、scp、sftp、tftp、telnet等協議,這裏只針對http進行講解一些經常使用的用法,具體安裝請自行搜索。nginx
curl http://www.baidu.com
接着你就會看到百度的頁面源代碼輸出。sql
若是要把這個網頁保存下來,能夠這樣:apache
curl http://www.baidu.com > /tmp/baidu.html
你會看到一條進度條,而後源碼就被重定向到了/tmp/baidu.html。json
或者:後端
curl -o /tmp/baidu.html http://www.baidu.com
默認直接請求一個url就是發出一個get請求,參數的話直接拼接在url裏就行了,如api
curl http://www.baidu.com/s?wd=curl
上述請求會上百度發起一條查詢請求,參數是wd=url服務器
curl -d "name=test&page=1" http://www.baidu.com
-d 參數指定表單以POST的形式執行。markdown
curl -I http://www.baidu.com
能夠看到只返回一些header信息app
HTTP/1.1 200 OK Date: Fri, 07 Nov 2014 09:48:58 GMT Content-Type: text/html; charset=utf-8 Connection: Keep-Alive Vary: Accept-Encoding Set-Cookie: BAIDUID=E9DB2F0AC95CB6BFDAD9D5CFDCED0A12:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com Set-Cookie: BAIDUPSID=E9DB2F0AC95CB6BFDAD9D5CFDCED0A12; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com Set-Cookie: BDSVRTM=0; path=/ Set-Cookie: BD_HOME=0; path=/ Set-Cookie: H_PS_PSSID=9725_9165_1465_7800_9452_9498_6504_9509_6018_9700_9757_9531_9478_7798_9453_9793_9024; path=/; domain=.baidu.com P3P: CP=" OTI DSP COR IVA OUR IND COM " Cache-Control: private Cxy_all: baidu+3057b288b211c770a1463cc8519b62a8 Expires: Fri, 07 Nov 2014 09:48:17 GMT X-Powered-By: HPHP Server: BWS/1.1 BDPAGETYPE: 1 BDQID: 0xfa28eff900012706 BDUSERID: 0
-v參數能夠顯示一次http通訊的整個過程,包括端口鏈接和http request頭信息
curl -v www.baidu.com
* Adding handle: conn: 0x7ffe4b003a00 * Adding handle: send: 0 * Adding handle: recv: 0 * Curl_addHandleToPipeline: length: 1 * - Conn 0 (0x7ffe4b003a00) send_pipe: 1, recv_pipe: 0 * About to connect() to www.baidu.com port 80 (#0) * Trying 61.135.169.125... * Connected to www.baidu.com (61.135.169.125) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.30.0 > Host: www.baidu.com > Accept: */* > < HTTP/1.1 200 OK < Date: Fri, 07 Nov 2014 09:49:49 GMT < Content-Type: text/html; charset=utf-8 < Transfer-Encoding: chunked < Connection: Keep-Alive < Vary: Accept-Encoding < Set-Cookie: BAIDUID=062E02D23FBB651CF8455B699DF02B64:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com < Set-Cookie: BAIDUPSID=062E02D23FBB651CF8455B699DF02B64; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com < Set-Cookie: BDSVRTM=0; path=/ < Set-Cookie: BD_HOME=0; path=/ < Set-Cookie: H_PS_PSSID=7744_1429_7801_9583_9499_6506_6018_9769_9699_9757_9532_9477_7799_9453_9716_9023; path=/; domain=.baidu.com < P3P: CP=" OTI DSP COR IVA OUR IND COM " < Cache-Control: private < Cxy_all: baidu+7dcb6b3c03d32c334d42f311919a14d6 < Expires: Fri, 07 Nov 2014 09:49:20 GMT < X-Powered-By: HPHP * Server BWS/1.1 is not blacklisted < Server: BWS/1.1 < BDPAGETYPE: 1 < BDQID: 0xadb706860000088f < BDUSERID: 0
若是你以爲上面的信息還不夠,那麼下面的命令能夠查看更詳細的通訊過程。
curl --trace output.txt www.baidu.com
或者
curl --trace-ascii output.txt www.baidu.com
運行後,請打開output.txt文件查看。
curl默認的HTTP方法是GET,使用-X參數能夠支持其餘動詞。
curl -X POST www.example.com
curl -X DELETE www.example.com
有時你須要在http request頭信息中,提供一個referer字段,表示你是從哪裏跳轉過來的。
curl --referer http://www.example.com http://www.example.com
這個字段是用來表示客戶端的設備信息。服務器有時會根據這個字段,針對不一樣設備,返回不一樣格式的網頁,好比手機版和桌面版。
iPhone4的User Agent是
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
curl能夠這樣模擬:
curl --user-agent "[User Agent]" [URL]
有時須要在http request之中,自行增長一個頭信息。--header參數就能夠起到這個做用。
curl --header "Content-Type:application/json" http://example.com