溫馨提示×

溫馨提示×

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

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

Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些

發(fā)布時(shí)間:2022-05-31 13:56:04 來源:億速云 閱讀:134 作者:iii 欄目:編程語言

本文小編為大家詳細(xì)介紹“Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些

HTTP協(xié)議與特點(diǎn)

如果將 HTTP協(xié)議當(dāng)做一個(gè)人來比較的話,想要深入了解這個(gè)人的時(shí)候,肯定會(huì)先去了解對方的性格特征等。那么 HTTP協(xié)議 有什么特征呢?總的來說有以下幾個(gè)特點(diǎn):

  • 1、第一個(gè)特點(diǎn):HTTP協(xié)議支持 客戶/服務(wù)端 模式;因?yàn)?HTTP 協(xié)議 是 TCP、IP 協(xié)議簇的一員,與其他成員一樣 ,用于客戶端與服務(wù)器之間的通信;而 客戶/服務(wù)器模式 的工作方式是由客戶端向服務(wù)器發(fā)出請求,服務(wù)器端響應(yīng)請求,并進(jìn)行響應(yīng)的服務(wù);所有的 HTTP請求 都是從客戶端開始建立通信,服務(wù)器端在沒有接收到任何的客戶端請求之前是不會(huì)發(fā)出響應(yīng)的;這就是 HTTP協(xié)議 的特點(diǎn)之一 。


Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些


  • 2、第二個(gè)特點(diǎn):簡單快速 ;客戶端向服務(wù)器請求服務(wù)的時(shí)候,只需要傳入請求的方法和路徑;常用的請求方法有 GET、HEAD、POST(除了這三種之外,還有其他不那么常用的方法,有興趣的小伙伴可以在 HTTP協(xié)議狀態(tài)及報(bào)文組成 一文進(jìn)行拓展);由于 HTTP協(xié)議 簡單,使得 HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快。


  • 3、第三個(gè)特點(diǎn):靈活 ;之所以靈活是因?yàn)?HTTP 允許傳輸任意類型的數(shù)據(jù)對象;傳輸?shù)念愋陀?Content-Type 加以標(biāo)記內(nèi)容類型,支持多種內(nèi)容格式的傳輸。(兼容性很強(qiáng))


  • 4、第四個(gè)特點(diǎn):無連接;這里的無連接可不是沒有連接的意思,而是限制每個(gè)連接只處理一個(gè)請求。服務(wù)器處理完客戶端的請求并收到客戶端的應(yīng)答之后,就斷開連接。采用如此的設(shè)計(jì)方式呢,能夠節(jié)省傳輸時(shí)間。

    • 拓展:可能有同學(xué)認(rèn)為一個(gè)頁面有很多個(gè) HTTP 請求,來回這樣連接、斷開會(huì)效率很低。其實(shí)早期這么做的原因是因?yàn)楫a(chǎn)生于互聯(lián)網(wǎng),因此服務(wù)器需要處理同時(shí)面向全世界 數(shù)十萬、上百萬 的網(wǎng)頁訪問。但是每個(gè)客戶端(或者說瀏覽器)與服務(wù)器之間交換數(shù)據(jù)的間歇性特別大,所以 HTTP 的傳輸是具備突發(fā)性與順時(shí)性的,大部分通道實(shí)際上會(huì)很空閑,無端的占用資源比較浪費(fèi)。因此呢, HTTP 的設(shè)計(jì)者有意使用這樣的特點(diǎn)將協(xié)議設(shè)計(jì)為 請求的時(shí)候建立連接,請求完就釋放連接。 盡快的將資源釋放出來服務(wù)給其他的客戶端,無論怎樣,對于同一個(gè)客戶端來說,還是每一次只處理一個(gè)請求,所以我們也能看出來 HTTP 協(xié)議的另外一個(gè)優(yōu)點(diǎn),它很專一。(*^▽^*)


  • 5、最后一個(gè)特點(diǎn):無狀態(tài); 無狀態(tài)的意思就是說 HTTP協(xié)議對于事務(wù)的處理沒有記憶能力 ;缺少狀態(tài)就意味著如果后續(xù)處理需要前面的信息,則必須要重傳,這就很可能會(huì)導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前的信息時(shí)它的響應(yīng)就比較快。


PS:所以 HTTP 的這些特性是既有優(yōu)點(diǎn)也有缺點(diǎn)。

  • 優(yōu)點(diǎn):優(yōu)點(diǎn)在于解放服務(wù)器,每一次請求點(diǎn)到為止不會(huì)造成不必要的連接占用。

  • 缺點(diǎn):缺點(diǎn)在于每一次請求都會(huì)傳輸大量的重復(fù)內(nèi)容信息。

  • 所以保持 HTTP 連接的兩種技術(shù)就應(yīng)運(yùn)而生了,那就是 cookiesession 。

HTTP的請求與響應(yīng)

現(xiàn)在我們知道 HTTP協(xié)議 是一種請求與響應(yīng)的模式,那么就來一起認(rèn)識一下 HTTP的請求和響應(yīng)吧,先從 HTTP協(xié)議的請求說起。

HTTP的請求

請求 是發(fā)送給接口的數(shù)據(jù)對象,包括接口的地址(也就是常說的 URL)、請求的方法(get、post…)、參數(shù)、請求頭(Headers)、Cookies、數(shù)據(jù)等等… 見下圖:


Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些


Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些


上圖中的報(bào)文內(nèi)容就是典型的 HTTP協(xié)議的 post 與 get 請求報(bào)文(忽略get請求報(bào)文的請求體,那是我瞎編的 。):

  • 1、第一行就是請求行,包含有請求方法、請求URI、HTTP協(xié)議及版本(與第二行的 host屬性 相結(jié)合形成了完整的 請求URL )

  • 2、中間的部分就是報(bào)文頭,包含有若干個(gè)屬性;格式就是圖中的 屬性名:屬性值 這樣的格式。服務(wù)端根據(jù)報(bào)文頭來獲取客戶端的信息。

  • 3、最下面的部分就是報(bào)文體,報(bào)文體與報(bào)文頭之間必須有一個(gè)空行。在類似圖中這樣一個(gè) post 請求里面將頁面表單里的組件值通過 name=admin&passwd=123456 這樣類似的鍵值對的格式編碼形成這樣的格式化串,承載多個(gè)請求參數(shù)的數(shù)據(jù)。(不僅僅是報(bào)文體可以傳輸數(shù)據(jù),請求的 URL 在 get 請求方法的時(shí)候也是支持傳遞參數(shù)的。)


在這里可以看出主要的信息是通過請求的方法、url、與報(bào)文的主體來進(jìn)行傳遞的。這也是 HTTP 的特征之一,簡單快速,同時(shí)也會(huì)發(fā)現(xiàn)報(bào)文頭里也包含有很多種信息,這些做一個(gè)了解即可。參考 HTTP協(xié)議狀態(tài)及報(bào)文組成 文末的請求頭報(bào)文。


HTTP的響應(yīng)

熟悉了 HTTP 的請求,再來看一下響應(yīng)。見下圖:


Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些

可以從響應(yīng)報(bào)文的樣式看出,與請求的報(bào)文比較相像,他也分為三個(gè)部分:請求行對應(yīng)響應(yīng)行、請求頭對應(yīng)響應(yīng)頭、請求體對應(yīng)著響應(yīng)體。

  • 1、響應(yīng)行分為兩部分:報(bào)文協(xié)議版本及響應(yīng)狀態(tài)碼。

  • 2、響應(yīng)頭也分為服務(wù)器類型、相應(yīng)數(shù)據(jù)類型響應(yīng)時(shí)間等多個(gè)參數(shù)。

  • 3、響應(yīng)體就是我們真正想要的干貨,就是請求的最終返回內(nèi)容。主要針對這個(gè)內(nèi)容進(jìn)行解析,比如說請求的是一個(gè)頁面,這個(gè)時(shí)候請求的返回就是一個(gè)比較大的 HTML


HTTP請求方法剖析

更多內(nèi)容參考 HTTP協(xié)議狀態(tài)及報(bào)文組成 一文的 HTTP請求方法

GET 方法

GET方法 用來請求訪問已被 URI 識別的資源,指定的資源經(jīng)服務(wù)器端解析后返回響應(yīng)內(nèi)容。(見下圖)


Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些


PSOT 方法

POST方法GET方法 功能類似,一般用來傳輸實(shí)體的主體;主要的目的不是為了獲取響應(yīng)主體的內(nèi)容,是向 WEB服務(wù)器提供表單數(shù)據(jù),尤其是大批量的數(shù)據(jù) 。

POST方法 其實(shí)是克服了 GET方法 的一些缺點(diǎn),通過 POST 請求,數(shù)據(jù)就不是作為一個(gè) URL 請求的一部分了,而是作為標(biāo)準(zhǔn)數(shù)據(jù)的格式來傳遞給 WEB服務(wù)器 這也就克服了 GET方法 中數(shù)據(jù)無法保密且數(shù)據(jù)量有限制的缺點(diǎn)。


Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些


接下來就是一些不太常用的一些方法的介紹了。

PUT 方法
  • 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。

  • PUT方法與POST方法最大的不同的是:PUT是冪等的,而POST是不冪等的。因此,更多的時(shí)候我們將 PUT方法用作傳輸資源。

  • 開啟 PUT方法 需要控制權(quán)限,否則會(huì)造成一定的安全隱患,比如向服務(wù)器傳輸帶有惡意 payload 的攻擊腳本。

HEAD 方法
  • HEAD方法 幾乎與 GET 方法相同,只不過HEAD方法只請求消息報(bào)文頭,返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報(bào)頭。

DELETE 方法
  • 請求服務(wù)器刪除指定的資源,也就是刪除文件。(一般服務(wù)器會(huì)控制此方法的權(quán)限,否則會(huì)造成重大的安全漏洞。)

OPTIONS 方法
  • 用來查詢針對請求的 URI 指定的資源支持的方法,就是詢問 請求的URL能夠支持什么方法 。


Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些

該方法在實(shí)際工作中使用的是非常少的,在安全領(lǐng)域經(jīng)常會(huì)被攻擊者、滲透測試工程師用于信息收集。


TRACE 方法
  • 用于回顯服務(wù)器收到的請求,主要用于測試或診斷。(不常用)

  • 在安全領(lǐng)域經(jīng)常被用于跨站攻擊。

CONNECT 方法
  • 開啟與客戶端所請求的資源之間的雙向溝通的通道,所以更多的時(shí)候是用它來建立隧道。(使用代理的時(shí)候就是使用的這個(gè)方法)

HTTP狀態(tài)碼詳解

HTTP 狀態(tài)碼

在我們使用瀏覽覽器向WEB網(wǎng)頁所在服務(wù)器發(fā)出請求時(shí),當(dāng)服務(wù)器接收我們的請求并響應(yīng)的情況下。瀏覽器會(huì)接收并顯示網(wǎng)頁,此網(wǎng)頁所在的服務(wù)器會(huì)返回一個(gè)包含HTTP狀態(tài)碼的信息頭(server header)用以響應(yīng)我們在瀏覽器中的請求。

HTTP狀態(tài)碼的英文為HTTP Status Code。
下面是常見的HTTP狀態(tài)碼

  • 200 - 請求成功

  • 301 - 資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL

  • 404 - 請求的資源(網(wǎng)頁等)不存在

  • 500 - 內(nèi)部服務(wù)器錯(cuò)誤


HTTP狀態(tài)碼分類

分類描述
1**信息,服務(wù)器收到請求,需要請求者繼續(xù)執(zhí)行操作
2**成功,操作被成功接收并處理
3**重定向,需要進(jìn)一步的操作以完成請求
4**客戶端錯(cuò)誤,請求包含語法錯(cuò)誤或無法完成請求
5**服務(wù)器錯(cuò)誤,服務(wù)器在處理請求的過程中發(fā)生了錯(cuò)誤

HTTP狀態(tài)碼表

狀態(tài)碼

英文名稱
中文描述
100Continue繼續(xù)??蛻舳藨?yīng)繼續(xù)其請求
101Switching Protocols切換協(xié)議。服務(wù)器根據(jù)客戶端的請求切換協(xié)議。
只能切換到更高級的協(xié)議,例如,切換到HTTP的新版本協(xié)議
200OK請求成功。一般用于GET與POST請求
201Created已創(chuàng)建。成功請求并創(chuàng)建了新的資源
202Accepted已接受。已經(jīng)接受請求,但未處理完成
203Non-Authoritative Information非授權(quán)信息。請求成功。但返回的meta信息不在原始的服務(wù)器,而是一個(gè)副本
204No Content無內(nèi)容。服務(wù)器成功處理,但未返回內(nèi)容。在未更新網(wǎng)頁的情況下,可確保瀏覽器繼續(xù)顯示當(dāng)前文檔
205Reset Content重置內(nèi)容。服務(wù)器處理成功,用戶終端(例如:瀏覽器)應(yīng)重置文檔視圖。
可通過此返回碼清除瀏覽器的表單域
206Partial Content部分內(nèi)容。服務(wù)器成功處理了部分GET請求
300Multiple Choices多種選擇。請求的資源可包括多個(gè)位置,相應(yīng)可返回一個(gè)資源特征與地址的列表
用于用戶終端(例如:瀏覽器)選擇
301Moved Permanently永久移動(dòng)。請求的資源已被永久的移動(dòng)到新URI,返回信息會(huì)包括新的URI,
瀏覽器會(huì)自動(dòng)定向到新URI。今后任何新的請求都應(yīng)使用新的URI代替
302Found臨時(shí)移動(dòng)。與301類似。但資源只是臨時(shí)被移動(dòng)??蛻舳藨?yīng)繼續(xù)使用原有URI
303See Other查看其它地址。與301類似。使用GET和POST請求查看
304Not Modified未修改。所請求的資源未修改,服務(wù)器返回此狀態(tài)碼時(shí),不會(huì)返回任何資源??蛻舳送ǔ?br/>會(huì)緩存訪問過的資源,通過提供一個(gè)頭信息指出客戶端希望只返回在指定日期之后修改的資源
305Use Proxy使用代理。所請求的資源必須通過代理訪問
306Unused已經(jīng)被廢棄的HTTP狀態(tài)碼
307Temporary Redirect臨時(shí)重定向。與302類似。使用GET請求重定向
401Unauthorized請求要求用戶的身份認(rèn)證
402Payment Required保留,將來使用
403Forbidden服務(wù)器理解請求客戶端的請求,但是拒絕執(zhí)行此請求
404Not Found服務(wù)器無法根據(jù)客戶端的請求找到資源(網(wǎng)頁)。通過此代碼,網(wǎng)站設(shè)計(jì)人員可
設(shè)置"您所請求的資源無法找到"的個(gè)性頁面
405Method Not Allowed客戶端請求中的方法被禁止
406Not Acceptable服務(wù)器無法根據(jù)客戶端請求的內(nèi)容特性完成請求
407Proxy Authentication Required請求要求代理的身份認(rèn)證,與401類似,但請求者應(yīng)當(dāng)使用代理進(jìn)行授權(quán)
408Request Time-out服務(wù)器等待客戶端發(fā)送的請求時(shí)間過長,超時(shí)
409Conflict服務(wù)器完成客戶端的PUT請求是可能返回此代碼,服務(wù)器處理請求時(shí)發(fā)生了沖突
410Gone客戶端請求的資源已經(jīng)不存在。410不同于404,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼,
網(wǎng)站設(shè)計(jì)人員可通過301代碼指定資源的新位置
411Length Required服務(wù)器無法處理客戶端發(fā)送的不帶Content-Length的請求信息
412Precondition Failed客戶端請求信息的先決條件錯(cuò)誤
413Request Entity Too Large由于請求的實(shí)體過大,服務(wù)器無法處理,因此拒絕請求。為防止客戶端的連續(xù)請求,服務(wù)器可能會(huì)
關(guān)閉連接。如果只是服務(wù)器暫時(shí)無法處理,則會(huì)包含一個(gè)Retry-After的響應(yīng)信息
414Request-URI Too Large請求的URI過長(URI通常為網(wǎng)址),服務(wù)器無法處理
415Unsupported Media Typ服務(wù)器無法處理請求附帶的媒體格式
416Requested range not satisfiabl客戶端請求的范圍無效
417Expectation Failed服務(wù)器無法滿足Expect的請求頭信息
500Internal Server Erro服務(wù)器內(nèi)部錯(cuò)誤,無法完成請求
501Not Implemented服務(wù)器不支持請求的功能,無法完成請求
502Bad Gateway充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器,從遠(yuǎn)端服務(wù)器接收到了一個(gè)無效的請求
503Service Unavailable由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)的無法處理客戶端的請求。延時(shí)的長度可包含在服務(wù)器
的Retry-After頭信息中
504Gateway Time-out充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器,未及時(shí)從遠(yuǎn)端服務(wù)器獲取請求
505HTTP Version not supported服務(wù)器不支持請求的HTTP協(xié)議的版本,無法完成處理

讀到這里,這篇“Python接口自動(dòng)化測試之http協(xié)議的知識點(diǎn)有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

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

AI