[天天一命令]curl

curl,全稱爲CommandLine URL命令行url,是在命令行下使用url語法工做的數據傳輸或文件傳輸的工具。開發人員常常使用它來調試接口或者下載文件。curl官網:curl.haxx.se/html

接下來咱們將使用curl發送請求,並使用wireshark工具抓包分析每一條命令的內容。wireshark不瞭解的能夠看文章底部,個人參考資料。jquery

curl命令格式爲: curl [options...] <url> 能夠查看curl的幫助以下圖: linux

curl

如下列舉curl經常使用和炫酷的一些功能,不經常使用的請本身網上搜索。 使用-v選項能夠查看curl發送請求的過程json

不帶選項的get請求

curl http://www.baidu.com 執行命令後,至關於使用get請求訪問了百度首頁,wireshark抓到的包以下,User-Agent爲curl/7.49: 瀏覽器

wireshark
命令返回結果爲百度的首頁:
百度首頁

保存、下載文件

curl -o baidu.html http://www.baidu.com -o(小寫):能夠將返回的結果保存到文件。固然也可使用linux的>>重定向。 以下圖,用瀏覽器打開下載後的文件,就是百度的首頁。 bash

baidu

重定向

當一個被請求頁面移動到另外一個站點時,curl默認不會自動重定向,使用-L選項會發送一個HTTP Loaction header做爲請求,而後將請求重定向到新的地址上。以下,curl http://www.jianshu.com訪問簡書會提示已經重定向,咱們加上-L選項,curl會重定向到正確的地址。 curl -L http://www.jianshu.com 服務器

301重定向

post請求-x-www-form-urlencoded

post請求使用-d後面接post數據,默認的post請求編碼爲application/x-www-form-urlencoded,以下,往w3c的post測試網址 https://www.w3school.com.cn/example/jquery/demo_test_post.asp 發送post參數name和city,其會返回問候信息。 curl -d "name=huang&city=guangzhou" https://www.w3school.com.cn/example/jquery/demo_test_post.asp cookie

post請求
以上w3c的網址是https,我改成fiddler安裝證書使用代理抓https的包時報錯,記錄在此,之後深刻學習https在來解決,報錯以下
https抓取報錯

post請求-json格式

post請求有多種編碼格式,常有的有上面默認的x-www-form-urlencoded,仍是RESTFul風格接口常常使用的json傳輸。curl post json數據須要加請求頭和數據。 curl -H 'Content-Type:application/json' -d '{"name":"huang"}' http://www.example.com -H表示請求頭,若是有多個請求頭,可使用多個-H指定,-d表示數據。app

http動詞

RESTFul風格的網站,通常除了get,post外,會設置多種http動詞,如put,delete等,curl使用選項-X(大寫)能夠指定特定的動詞。 curl -X DELETE http://www.example.comcurl

模擬瀏覽器-User-Agent

模擬Chrome瀏覽器可使用-A後面接User-Agent字符串: curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://www.baidu.com 以下,wireshark抓包後,User-Agent確實修改了。

User-Agent

使用代理

curl -x 127.0.0.1:8888 http://www.google.com 使用代理服務器127.0.0.1:8888訪問。以下,若是不使用代理,訪問不到google,使用代理後,能夠獲取到數據。

google
結果以下,由於我使用的是韓國的代理服務器,因此返回的google首頁是韓文。
google
此次走代理服務器,wireshark沒有抓到http的包。

頭部信息-cookie

curl不加選項的話,默認使用get請求輸出返回的內容,若是須要保存請求頭的信息,則要添加選項。 保存cookie,選項-c(小寫):curl -c cookie.txt http://www.baidu.com 使用cookie,選項-b:curl -b cookie.txt http://www.baidu.com

頭部信息-header

若是須要保存全部頭部信息,以下。 curl -D http://www.baidu.com

分段下載合併

使用-r能夠分段下載內容,最後用cat命令能夠將分段的內容合併。以下,我將百度頁面分爲兩部分下載,前0-1000字節爲第一部分,剩下的爲另外一部分。下載完後合併。圖片同理。

# 分段下載
curl -r 0-1000 -o baidu_1.html http://www.baidu.com
curl -r 1000- -o baidu_2.html http://www.baidu.com
# 合併文件 
cat baidu* > baidu.html
複製代碼

以下,第一部分只有一個百度的搜索框,將兩部分合並後就是一個完整的百度首頁了。

百度首頁第一部分
-r選項的原理是使用了http請求頭Range,wireshark抓包以下。
Range

參考資料

  1. curl:blog.csdn.net/deliciousio…
  2. wireshark:www.cnblogs.com/linyfeng/p/…
  3. post請求編碼:imququ.com/post/four-w…
  4. curl使用post請求:ifttl.com/send-http-p…
相關文章
相關標籤/搜索