一、HTTP請求Content-Type
常見的媒體格式類型如下:
- text/html : HTML格式
- text/plain :純文本格式
- text/xml : XML格式
- image/gif :gif圖片格式
- image/jpeg :jpg圖片格式
- image/png:png圖片格式
以application開頭的媒體格式類型:
- application/xhtml+xml :XHTML格式
- application/xml: XML數據格式
- application/atom+xml :Atom XML聚合格式
- application/json: JSON數據格式
- application/pdf:pdf格式
- application/msword : Word文檔格式
- application/octet-stream : 二進制流數據(如常見的文件下載)
- application/x-www-form-urlencoded : <form encType=””>中默認的encType,form表單數據被編碼為key/value格式發送到服務器(表單默認的提交數據的格式)
另外一種常見的媒體格式是上傳文件之時使用的:
- multipart/form-data : 需要在表單中進行文件上傳時,就需要使用該格式
二、幾種常見的Content-Type類型
1、application/x-www-form-urlencoded
常用於原生的 form 表單提交,如果不指定content-type,默認使用此格式提交數據。
參數格式:key1=value1&key2=value2
2、content-type:multipart/form-data
另一個常見的 POST 數據提交的方式, Form 表單的 enctype 設置為multipart/form-data,它會將表單的數據處理為一條消息,以標簽為單元,用分隔符(這就是boundary的作用)分開。
由於這種方式將數據有很多部分,它既可以上傳鍵值對,也可以上傳文件,甚至多個文件。當上傳的字段是文件時,會有Content-Type來說明文件類型;Content-disposition,用來說明字段的一些信息。每部分都是以分隔符開始,緊接着是內容描述信息,然后是回車,最后是字段具體內容(字段、文本或二進制等)。如果傳輸的是文件,還要包含文件名和文件類型信息。消息主體最后以 分隔符標示結束。
常用於文件傳輸
發送的請求示例:
3、application/json
以Json格式編碼數據體,方便傳輸結構化數據(相比鍵值對),廣泛用於 ajax 請求
參數為json格式
{
"key1":"value1",
"key2":"value2"
}
4、text/xml
以xml格式編碼數據體,是早期廣泛使用的格式
三、不同的content-type在jmeter中如何輸入參數
1、application/x-www-form-urlencoded
參數可以在Parameters或Body Data里輸入,格式不同。這兩個參數輸入的tab頁只能使用一個,某一個有數據后不能切換到另一個。
示例如下
Parameters:
Body Data:
2、 content-type:application/json
(1)http請求頭管理里面設置content-type為application/json
(2)在http請求,Body Data中輸入json格式的參數
3、content-type:multipart/form-data
這種content-type的使用個人還沒完全會使用,下面內容摘自該文章:https://cloud.tencent.com/developer/news/367695
multipart/form-data主要用於post請求體中需要上傳文件的場景。網上很多帖子告訴大家怎么傳文件,卻忽略了當post請求體中既需要上傳文件,又需要傳一般的json格式參數這種場景,下面就以常用的三種接口測試方法介紹multipart/form-data格式請求的發送,希望可以減少大家將會踩到的坑(工具里的一些設置原理沒有搞得太清楚,但是以下的實現方式親測有效):
(1)填寫protocal、host、port、method、url、encoding等;
(2)勾選Use multipart/form-data for POST;
(3)parameter中填寫請求中除文件外的普通json格式參數;

(4)在Files Upload中填寫需要上傳的文件路徑、參數名、MIME Type(multipart/form-data);如果這里沒有需要上傳的文件,也可以不填,只發送parameters中的參數,前提是后端接口認為這個參數不是必傳參數;
(5)http頭信息中輸入cookie等信息,這里千萬不要輸入content-type為multipart/form-data,在請求那里已經勾選了Use multipart/form-data for POST(注:如果頭信息這里輸入了content-type為multipart/form-data,那么所有的參數都會被當成文件以二進制形式傳輸,我們parameter里的文本格式參數就不會被識別,接口會提示那些參數為空,這點絕對是萬年坑);
(6)接下來我們觀察下我們發送出的請求具體內容:
第1處:有些同學會有疑問說那文件格式的上傳是以二進制形式的,multipart/form-data格式的參數的分隔符boundary呢,jmeter會自動生成;
第2處:可以看到tmp.py這個文件名和前面的name是這個文件在當前接口中的參數名;
第3處:說明該文件content-type為multipart/form-data;
第4處:實際的文件內容在這里不會展示;

可以看到我們在parameter中輸入的非文件類型參數的content-type為text/plain;
