我們在做介面測試之前,先需要根據介面文件或抓包介面資料,搞清楚被測介面的詳細內容,其中就包含請求引數的編碼格式,從而使用對應的引數格式傳送請求。例如某個介面規定的請求主體的編碼方式為 application/json,那麼在請求該介面時,請求引數格式必須是 json 格式,使用其他的編碼方式請求不會成功。
那麼,在http請求中,請求主體常用的編碼方式有哪些?每種編碼方式在python中需要對應使用什麼樣格式的請求引數?這便是我們們在本篇部落格要弄明白的地方。
content-type
在POST請求中,由content-type指定請求引數的格式,所以,為了搞清楚請求引數的編碼格式,我們有必要了解HTTP請求頭資訊中的 content-type 欄位。
content-type的作用
在HTTP協議中,報文通常包括兩個部分 請求頭部(head)、請求主體(body),其中 body 可以為空,如 GET 請求是將請求引數放在請求URL中而不是放在 body 中。
而POST請求中的請求引數則是放在 body 中,接收請求的一端(也就是伺服器)需要知道傳過來的 body 是什麼型別的資料,採用怎樣的編碼方式,才能對資料進行對應的解析,這時就需要在請求頭中使用 content-type 來指明 body 的媒體型別。
媒體型別
媒體型別(通常稱為 Multipurpose Internet Mail Extensions 或 MIME 型別 )是一種標準,用來表示文件、檔案或位元組流的性質和格式。它在IETF RFC 6838中進行了定義和標準化。
瀏覽器通常使用MIME型別(而不是副檔名)來確定如何處理URL,因此Web伺服器在響應頭中新增正確的MIME型別非常重要。如果配置不正確,瀏覽器可能會曲解檔案內容,網站將無法正常工作,並且下載的檔案也會被錯誤處理。而瀏覽器傳過來的內容也需要指定媒體型別,伺服器才能根據媒體型別做對應的資料解析。
常見的媒體型別如下:
另外還有 multipart 型別,表示細分領域的檔案型別的種類,經常對應不同的 MIME 型別,用於檔案的上傳,分為如下兩種:
multipart/form-data
multipart/byteranges
這裡均只做簡單說明,具體每種型別的使用詳情可自行查詢相關資料。
總之,在介面測試中,請求頭中的 Content-Type 作用就是,用來告知服務端請求body的編碼方式。GET請求因為body為空,所以在GET請求中沒有Content-Type欄位。
get請求引數格式
我們已經知道GET請求的請求引數是直接放在URL中的,且不需要content-type指定媒體型別。而GET請求中的請求引數的編碼格式為query string params。
query string params
說明
query string params 格式,引數會以 url string 的形式進行傳遞,即?
後的字串則為其請求引數,並以&
作為分隔符,引數編寫方式為?key=value&key=value
,拼接在 url 後面。通常用於GET請求,除此之外其他有些請求方式也可以使用這種格式。
在瀏覽器中開啟百度,搜尋給你一頁白紙-部落格園
,通過F12抓包也可以看到 Payload 中請求引數的格式為 Query String Parameters,如下圖:
即開啟URL連結https://www.baidu.com/s?ie=utf-8&wd=給你一頁白紙-部落格園
。
python程式碼傳送請求
如果使用python中的 requests.get() 對上圖示例傳送get請求,則需使用引數 params,引數值為 dict (字典) 格式即可,示例如下:
import requests
url = "http://www.baidu.com/s"
params = {"wd": "給你一頁白紙-部落格園", "ie": "utf-8"}
res = requests.get(url=url, params=params)
print(res.text)
GET請求中請求主體編碼格式固定,在做介面測試時基本無需確定其編碼格式,較為簡單。
post請求引數格式
由上一篇文章傳送post請求,我們知道HTTP協議中的POST請求,其請求引數有不同的編碼格式。
服務端通常是根據請求頭(headers)中的 Content-Type 欄位來獲知請求中的訊息主體是用何種方式編碼,再對請求引數進行對應方式的解析。
post請求常見的編碼方式有四種:
-
application/x-www-form-urlencoded
-
multipart/form-data
-
application/json
-
text/xml
application/x-www-form-urlencoded
application/x-www-form-urlencoded 是最常見的 POST 提交資料的方式,用於表單資料的提交。瀏覽器的原生