溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

http報文結構與curl的使用方法

發(fā)布時間:2021-08-30 15:46:00 來源:億速云 閱讀:247 作者:chen 欄目:大數(shù)據(jù)

本篇內容介紹了“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來抓包,可以看到這樣的請求與響應的信息: 
http報文結構與curl的使用方法

關于charles的使用,小程之前有介紹到,讀者可以關注“廣州小程”微信公眾號,并查閱“軟件基礎”菜單項的內容。

從數(shù)據(jù)包來看,有一個GET方法,返回了200的狀態(tài)碼,等等。

但這里混合了請求與響應的信息,如果分開來看,請求與響應各自有什么數(shù)據(jù)結構呢?

(1)請求報文

http請求數(shù)據(jù),使用的結構是這樣的:

{請求行,請求頭,請求體}

小程引用網(wǎng)上的一張圖,這張圖描繪了這個結構: 
http報文結構與curl的使用方法

參照上圖,請求行是這個樣子:

GET /index.html HTTP/1.1 
或者: 
POST /xiaocheng/about.html HTTP/1.1 

注意,請求行一般不包括host的地址,而host地址存放在請求頭中。

然后是請求頭,分為多行,每一行是一個鍵值對(key: value的格式),比如請求頭是這個樣子的: 
http報文結構與curl的使用方法

最后是請求體,一般來GET方法是不帶請求體的,因為所有內容都放到請求行(特別是url中)或請求頭中了,一般來說POST方法需要帶請求體,比如在iTunes下載一個APP時,POST請求數(shù)據(jù)是這樣的: 
http報文結構與curl的使用方法
http報文結構與curl的使用方法

(2)響應報文

響應數(shù)據(jù)的結構,也可以分三部分:

{響應行,響應頭,響應體}

這里給一個響應實例: 
http報文結構與curl的使用方法
http報文結構與curl的使用方法

響應行,也叫狀態(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。

(3)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)站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI