本篇內容介紹了“http報文結構與curl的使用方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
http協(xié)議使用廣泛,使用場景不必多說了。
http是應用層協(xié)議,基于tcp。如果要自己實現(xiàn)的話,應該先實現(xiàn)tcp部分的功能,然后按http的協(xié)議實現(xiàn)約定的功能。這種需求有時可能會出現(xiàn),比如讀者想寫一個http服務器,那就要了解http協(xié)議。
但是,這一個流程,從http數(shù)據(jù)包,到tcp包(加tcp頭),再到ip包(加ip頭),以及它的逆向過程(解包過程),都有現(xiàn)成的庫來實現(xiàn),讀者需要做的只是怎么更好的使用起來。
小程這里介紹的也不是什么復雜的http協(xié)議的實現(xiàn),而只是介紹一下http請求與響應的數(shù)據(jù)結構,以及怎么便利地發(fā)送http請求。
本文介紹http請求與響應的報文結構,以及curl的使用。
先讓讀者看一個直觀的示例:在百度的搜索框中,敲入“helloworld”并回車,這時會發(fā)起一個http請求,用charles來抓包,可以看到這樣的請求與響應的信息:
關于charles的使用,小程之前有介紹到,讀者可以關注“廣州小程”微信公眾號,并查閱“軟件基礎”菜單項的內容。
從數(shù)據(jù)包來看,有一個GET方法,返回了200的狀態(tài)碼,等等。
但這里混合了請求與響應的信息,如果分開來看,請求與響應各自有什么數(shù)據(jù)結構呢?
http請求數(shù)據(jù),使用的結構是這樣的:
{請求行,請求頭,請求體}
小程引用網(wǎng)上的一張圖,這張圖描繪了這個結構:
參照上圖,請求行是這個樣子:
GET /index.html HTTP/1.1
或者:
POST /xiaocheng/about.html HTTP/1.1
…
注意,請求行一般不包括host的地址,而host地址存放在請求頭中。
然后是請求頭,分為多行,每一行是一個鍵值對(key: value的格式),比如請求頭是這個樣子的:
最后是請求體,一般來GET方法是不帶請求體的,因為所有內容都放到請求行(特別是url中)或請求頭中了,一般來說POST方法需要帶請求體,比如在iTunes下載一個APP時,POST請求數(shù)據(jù)是這樣的:
響應數(shù)據(jù)的結構,也可以分三部分:
{響應行,響應頭,響應體}
這里給一個響應實例:
響應行,也叫狀態(tài)行,包括http的版本、狀態(tài)碼與狀態(tài)描述。
響應頭跟請求頭一樣,由一行一行的key-value構成。
響應體一般就是請求方想要的數(shù)據(jù)了,但響應體不一定會存在,比如HEAD請求方法時不返回響應體(這時響應行就是請求方想要的)。
http請求與響應數(shù)據(jù),還有其它的一些知識,比如GET與POST的區(qū)別、返回404/403/303表示什么意思,等等,這些知識讀者可以具體搜索一下,小程這里不展開了。
在簡單介紹過http請求與響應報文的結構后,小程介紹一個工具,這個工具可以發(fā)起http請求,這個工具就是curl。
小程使用的是macos,mac自帶了curl工具。
curl的功能也算強大的,提供了系列的選項。這里只介紹一些常規(guī)的使用方式。
get請求,與保存
curl www.baidu.com
curl "http://172.17.21.197:54321?pa1=hello"
// 保存,下載curl -o file.html www.baidu.com
curl -o i.jpg http://img3.douban.com/lpic/s4549903.jpg
// -A 仿造ie與運行平臺
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" www.baidu.com
// -e 仿造入口鏈接(即referer,用于盜鏈)
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -e "www.google.com" www.baidu.com
// -x 使用代理
curl -x a.b.c.d:54321 http://google.com
// -D 保存cookie到文件
curl www.baidu.com -o aa.txt -D cookie.txt
// -b 讀取文件并當作cookie數(shù)據(jù)來請求
curl www.baidu.com -b cookie.txt
// -H 設置請求頭,這里設置了cookie跟ua
curl -H "Cookie: install_id=14621691626; sid_guard=\"0eb878191489e4247f643672c932c814|1504782359|2592000|Sat\054 07-Oct-2017 11:05:59 GMT\"; \n User-Agent: xxx/1.5.6 (iPhone; iOS 10.2; Scale/2.00)" "https://xxx.yy.com/…"
post
// -d 請求體
curl -d "user=nickwolfe&password=12345" http://www.linuxidc.com/login.cgi
curl -d "key=jet" 192.168.2.32:54321
post,以表單的方式(multipart/form-data)
// "file"為key名,隨便起,后面為文件路徑(包括文件包)
curl -F "file=@./myfile.ok" "http://172.17.xx.xx:54321"
“http報文結構與curl的使用方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。