av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

創(chuàng)新互聯(lián)Python教程:pythonpos是什么

在接口測(cè)試中,接口通常是GET請(qǐng)求或者POST請(qǐng)求。以下是對(duì)接口測(cè)試中常見(jiàn)的四種Post請(qǐng)求數(shù)據(jù)方式進(jìn)行一個(gè)詳細(xì)的講解:

網(wǎng)站制作、做網(wǎng)站的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒(méi)有做好網(wǎng)站,給創(chuàng)新互聯(lián)建站一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。

一、post請(qǐng)求主體詳解

一個(gè)正常的post請(qǐng)求主要包括請(qǐng)求行,請(qǐng)求頭,請(qǐng)求主體。

對(duì)于get請(qǐng)求來(lái)說(shuō)沒(méi)有請(qǐng)求主體entity-body。對(duì)于post請(qǐng)求而言,不會(huì)對(duì)發(fā)送請(qǐng)求的數(shù)據(jù)格式進(jìn)行限制,理論上你可以發(fā)任意數(shù)據(jù),但是服務(wù)器能不能處理就是另一回事了。服務(wù)器收到數(shù)據(jù)后,如何解析數(shù)據(jù)呢?它會(huì)以請(qǐng)求頭中的Content-Type設(shè)置的內(nèi)容來(lái)進(jìn)行數(shù)據(jù)解析。確定好Content-Type的格式之后,請(qǐng)求主體的數(shù)據(jù)格式也就確定下來(lái)了。

二、Content-Type的格式有四種:

  1. application/x-www-form-urlencoded(這也是默認(rèn)格式)

  2. application/json

  3. text/xml

  4. multipart/form-data

這些不同的post請(qǐng)求數(shù)據(jù)格式要通過(guò)HttpEntity來(lái)構(gòu)造,有必要簡(jiǎn)單理一下HttpClient的HttpEntity對(duì)象,因?yàn)樗械膒ost請(qǐng)求數(shù)據(jù)均需要置于HttpEntity實(shí)體中進(jìn)行發(fā)送。HttpEntity是一個(gè)接口,實(shí)現(xiàn)這個(gè)接口的具體類(lèi)有很多,比較常用的是StringEntity、UrlEncodedFormEntity(繼承自StringEntity)、MultipartEntity。他們將在發(fā)送不同格式的post請(qǐng)求時(shí)被用到。接下來(lái)就詳細(xì)地介紹每一種數(shù)據(jù)格式對(duì)應(yīng)的fiddler請(qǐng)求模擬和Requests請(qǐng)求模擬(Python實(shí)現(xiàn))的實(shí)現(xiàn)情況。

三、application/x-www-form-urlencoded數(shù)據(jù)格式

在W3C官網(wǎng)上明確對(duì)這種數(shù)據(jù)格式進(jìn)行了定義:

This is the default content type. Forms submitted with this content type must be encoded as follows:Control names and 
values are escaped. Space characters are replaced by '+', and then reserved characters are escaped as described in 
[RFC1738], section 2.2: Non-alphanumeric characters are replaced by '%HH', a percent sign and two hexadecimal digits 
representing the ASCII code of the character. Line breaks are represented as "CR LF" pairs (i.e., '%0D%0A').The control
names/values are listed in the order they appear in the document. The name is separated from the value by '=' and 
name/value pairs are separated from each other by '&'.

這是post請(qǐng)求最常見(jiàn)也是默認(rèn)的數(shù)據(jù)提交格式。它要求數(shù)據(jù)名稱(chēng)(name)和數(shù)據(jù)值(value)之間以等號(hào)相連,與另一組name/value值之間用&相連。例如:parameter1=12345¶meter2=23456。將請(qǐng)求的內(nèi)容進(jìn)行格式化了,其實(shí)這個(gè)方法同時(shí)簡(jiǎn)化的客戶端發(fā)送,也簡(jiǎn)化了服務(wù)器端獲取,服務(wù)器通過(guò)getParameters(String name)即可獲取到傳送來(lái)的信息。這是最常見(jiàn)post提交數(shù)據(jù)的方式,以form表單形式提交數(shù)據(jù)。

(1)如果用fiddler模擬請(qǐng)求的話,請(qǐng)求頭和請(qǐng)求主體的內(nèi)容可以這樣構(gòu)造:

模擬請(qǐng)求之后,從返回結(jié)果可以查看到我們的請(qǐng)求數(shù)據(jù):

(2)如果用Requests模擬post請(qǐng)求的話,請(qǐng)求可以這樣構(gòu)造:

datas = {'parameter1':'12345','parameter2':'23456'}
r = requests.post('http://example.com',data=datas)
print(r.content)
print(r.status_code)

Reqeusts支持以form表單形式發(fā)送post請(qǐng)求,只需要將請(qǐng)求的參數(shù)構(gòu)造成一個(gè)字典,然后傳給requests.post()的data參數(shù)即可。

四、application/json數(shù)據(jù)格式

application/json格式的請(qǐng)求頭是指用來(lái)告訴服務(wù)端post過(guò)去的消息主體是序列化后的 JSON 字符串。

(1)如果用fiddler模擬請(qǐng)求的話,請(qǐng)求頭和請(qǐng)求主體的內(nèi)容可以這樣構(gòu)造:

模擬請(qǐng)求之后,從返回結(jié)果可以看到我們的請(qǐng)求數(shù)據(jù):

(2)如果用Requests模擬post請(qǐng)求的話,請(qǐng)求可以這樣構(gòu)造:

url = 'http://www.example/post'
s = json.dumps({'key1': 'value1', 'key2': 'value2'})
r = requests.post(url, data=s)
print (r.text)

這里我們可以發(fā)現(xiàn)Requests模擬post請(qǐng)求時(shí),請(qǐng)求頭格式為application/x-www-form-urlencoded與application/json的主要差別在于請(qǐng)求主體的構(gòu)造格式(前者是鍵值對(duì),后者是JSON串),前者直接用字典傳入,后者用json.dumps()函數(shù)將字典轉(zhuǎn)為JSON串即可。

五、text/xml數(shù)據(jù)格式

(1)如果用fiddler模擬請(qǐng)求的話,請(qǐng)求頭和請(qǐng)求主體的內(nèi)容可以這樣構(gòu)造:

模擬請(qǐng)求之后,從返回結(jié)果可以看到我們的請(qǐng)求數(shù)據(jù):

(2)如果用Requests模擬post請(qǐng)求的話,請(qǐng)求可以這樣構(gòu)造:

xml = """my xml"""
headers = {'Content-Type': 'application/xml'}
requests.post('http://www.example.com', data=xml, headers=headers)

或者把xml作為一個(gè)文件來(lái)傳輸:

import requests
def request_ws(request):
with open(archivo_request,"r") as archivo:
    request_data = archivo.read()
target_url = "http://127.0.0.1:8000/?wsdl"
headers = {'Content-type':'text/xml'}
data_response = requests.post(target_url, data=request_data, headers=headers)

六、multipart/form-data數(shù)據(jù)格式

除了傳統(tǒng)的application/x-www-form-urlencoded表單,我們另一個(gè)經(jīng)常用到的是上傳文件用的表單,這種表單的類(lèi)型為multipart/form-data。

(1)如果用fiddler模擬請(qǐng)求的話,請(qǐng)求頭和請(qǐng)求主體的內(nèi)容可以這樣構(gòu)造:

第一步,先設(shè)置好請(qǐng)求頭格式,然后點(diǎn)擊upload file...

第二步,上傳你的文件,這里我上傳一個(gè)png的圖片。

這是fiddler根據(jù)我們上傳的文件自動(dòng)調(diào)整生成的請(qǐng)求,在請(qǐng)求頭中看到,我們需要選擇一段數(shù)據(jù)作為“分割邊界”(boundary屬性),這個(gè)“邊界數(shù)據(jù)”不能在內(nèi)容其他地方出現(xiàn),一般來(lái)說(shuō)使用一段從概率上說(shuō)“幾乎不可能”的數(shù)據(jù)即可。每次post瀏覽器都會(huì)生成一個(gè)隨機(jī)的30-40位長(zhǎng)度的隨機(jī)字符串,瀏覽器一般不會(huì)遍歷這次post的所有數(shù)據(jù)找到一個(gè)不可能出現(xiàn)在數(shù)據(jù)中的字符串,一般都是隨機(jī)生成。選擇了這個(gè)邊界之后,瀏覽器便把它放在Content-Type 里面?zhèn)鬟f給服務(wù)器,服務(wù)器根據(jù)此邊界解析數(shù)據(jù)。下面的數(shù)據(jù)便根據(jù)boundary劃分段,每一段便是一項(xiàng)數(shù)據(jù)。(每個(gè)field被分成小部分,而且包含一個(gè)value是"form-data"的"Content-Disposition"的頭部;一個(gè)"name"屬性對(duì)應(yīng)field的ID等等,文件的話包括一個(gè)filename)模擬請(qǐng)求之后,從返回結(jié)果可以看到我們的請(qǐng)求數(shù)據(jù):

(2)如果用Requests模擬post請(qǐng)求的話,請(qǐng)求可以這樣構(gòu)造:

url = 'http://www.example.com'
files = {'file': open('C://Users//Someone//Desktop//2.png', 'rb')}
r = requests.post(url, files=files)
print(r.text)

綜上,就是接口測(cè)試中fiddler與requests模擬post接口四種請(qǐng)求數(shù)據(jù)的構(gòu)造方法,總結(jié)起來(lái)有利于在以后的接口測(cè)試工組過(guò)程中可以及時(shí)查閱。

同時(shí),Requests庫(kù)還可以處理多部分編碼(Multipart-Encoded)的文件,比如xls文件,甚至改寫(xiě)content-Type的報(bào)頭。

比如:

url = 'http://httpbin.org/post'
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
r = requests.post(url, files=files)

(推薦操作系統(tǒng):windows7系統(tǒng)、Python 3.9.1,DELL G3電腦。)


當(dāng)前名稱(chēng):創(chuàng)新互聯(lián)Python教程:pythonpos是什么
網(wǎng)頁(yè)URL:http://uogjgqi.cn/article/cosedhi.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流