小程序開(kāi)發(fā)公司網(wǎng)站源碼下載推廣免費(fèi)
目錄
引言
一、模塊說(shuō)明
二、Requests模塊快速入門
1?????發(fā)送簡(jiǎn)單的請(qǐng)求
2????發(fā)送帶參數(shù)的請(qǐng)求
4????響應(yīng)內(nèi)容
5????發(fā)送post請(qǐng)求
6????超時(shí)和代理
三、Requests實(shí)際應(yīng)用
引言
? ? ? ? 在使用Python進(jìn)行接口自動(dòng)化測(cè)試時(shí),實(shí)現(xiàn)接口請(qǐng)求構(gòu)建主要是使用Requests模塊。Requests庫(kù)是python的第三方模塊,requests模塊在python內(nèi)置模塊的基礎(chǔ)上進(jìn)行了高度的封裝,從而使得python進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí),變得更加簡(jiǎn)潔和人性化,以下介紹python Requests模塊的主要操作和應(yīng)用。
一、模塊說(shuō)明
Requests模塊是第三方模塊,需要預(yù)先安裝,requests模塊在python內(nèi)置模塊的基礎(chǔ)上進(jìn)行了高度的封裝,從而使得python進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí),變得更加簡(jiǎn)潔和人性化。它幾乎完全用python編寫,比urllib2模塊更易方便構(gòu)建請(qǐng)求。Requests模塊支持HTTP連接保持和連接池,支持使用cookie保持會(huì)話,支持文件上傳,支持自動(dòng)響應(yīng)內(nèi)容的編碼,支持國(guó)際化的URL和POST數(shù)據(jù)自動(dòng)編碼等功能特性。具體的功能特性介紹,可以學(xué)習(xí)requests中文文檔,requests模塊同時(shí)支持python2和python3相關(guān)的版本。中文在線文檔總結(jié)的模塊特性:
?
安裝requests模塊:
要安裝?Requests,打開(kāi)cmd,直接pip安裝,或pycharm中搜索requests?安裝即可
1.Pip安裝:pip install requests
2.Pycharm?中搜索?requests?安裝
?
二、Requests模塊快速入門
開(kāi)始導(dǎo)入requests模塊,然后即可使用該模塊下所有高度封裝的方法或者類。
?
1?????發(fā)送簡(jiǎn)單的請(qǐng)求
使用requests發(fā)送網(wǎng)絡(luò)請(qǐng)求,如訪問(wèn)百度,我們只需按如下方式發(fā)送請(qǐng)求即可。
可以這樣:
r?=?requests.get("https://www.baidu.com/")
也可以這樣:
url?=?'https://www.baidu.com/'
r?=?requests.get(url=url)
其他的請(qǐng)求方式大體都是這樣:
?
2????發(fā)送帶參數(shù)的請(qǐng)求
我們?cè)跇?gòu)建url發(fā)送請(qǐng)求時(shí)往往會(huì)傳遞一些數(shù)據(jù),這些數(shù)據(jù)往往會(huì)以鍵/值對(duì)的接在url中,接在一個(gè)問(wèn)號(hào)后面,編輯如下代碼如請(qǐng)求百度服務(wù)器地址,查詢:requests,那這個(gè)請(qǐng)求的url就像這樣:
import?requests
url?=?'https://www.baidu.com/'
data?=?{'wd':'requests'}
r?=?requests.get(url=url,params=data)
print(r.url)
打印出請(qǐng)求的url,r.url是獲取發(fā)送請(qǐng)求的url:
https://www.baidu.com/?wd=requests
一般發(fā)送get請(qǐng)求是將需要傳遞的參數(shù)傳遞到params中即可,上面實(shí)例params傳遞的是字典類型數(shù)據(jù),當(dāng)然也可以將一個(gè)列表作為值傳入:
payload?=?{'key1':?'value1',?'key2': ['value2',?'value3']}
r?=?requests.get('http://httpbin.org/get',?params=payload)
print(r.url)
輸出url:
http://httpbin.org/get?key1=value1&key2=value2&key2=value3
3????定制header頭和cookie
在發(fā)送請(qǐng)求時(shí),往往需要為請(qǐng)求添加http請(qǐng)求頭,requests庫(kù)也可以簡(jiǎn)單構(gòu)建傳遞請(qǐng)求頭,只要一個(gè)dict傳遞給請(qǐng)求的headers參數(shù)即可:
headers?=?{"Accept":?"application/json, text/plain, */*","User-Agent":?"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"}
r?=?requests.get(url=url,params=data,headers=headers)
有時(shí)有些請(qǐng)求需要攜帶cookie信息,在發(fā)送請(qǐng)求時(shí)也只要傳遞給請(qǐng)求的cookie參數(shù)即可:
?
4????響應(yīng)內(nèi)容
使用requests方法后,會(huì)返回一個(gè)response對(duì)象,其存儲(chǔ)了服務(wù)器響應(yīng)的內(nèi)容。在發(fā)送請(qǐng)求后,有時(shí)我們需要獲取發(fā)送請(qǐng)求的目標(biāo)服務(wù)的返回信息,如返回狀態(tài)碼、返回?cái)?shù)據(jù)體等,以及以什么樣的解碼方式返回?cái)?shù)據(jù)。如下是response對(duì)象封裝的方法:
?
5????發(fā)送post請(qǐng)求
HTTP?協(xié)議規(guī)定?POST?提交的數(shù)據(jù)必須放在消息主體(entity-body)中,但協(xié)議并沒(méi)有規(guī)定數(shù)據(jù)必須使用什么編碼方式,服務(wù)端通過(guò)是根據(jù)請(qǐng)求頭中的Content-Type字段來(lái)獲知請(qǐng)求中的消息主體是用何種方式進(jìn)行編碼,再對(duì)消息主體進(jìn)行解析。一般常用的提交數(shù)據(jù)方式包括:
1)以form表單提交數(shù)據(jù)
請(qǐng)求頭中的Content-Type值為:application/x-www-form-urlencoded,Reqeusts支持以form表單形式發(fā)送post請(qǐng)求,只需要將請(qǐng)求的參數(shù)構(gòu)造成一個(gè)字典,然后傳給requests.post()的data參數(shù)即可。
實(shí)例:
?
2)以json形式發(fā)送post請(qǐng)求
請(qǐng)求頭中的Content-Type值為:application/json,Reqeusts支持以json串形式發(fā)送post請(qǐng)求,只需要將一個(gè)python字典類型的數(shù)據(jù)轉(zhuǎn)換成json格式,然后傳給requests.post()的data參數(shù)即可。
實(shí)例:
?
3)以multipart/form-data形式上傳文件
經(jīng)常用到的是上傳文件用的表單,請(qǐng)求頭中的Content-Type值為:multipart/form-data,Requests支持以multipart形式發(fā)送post請(qǐng)求,只需將一文件傳給requests.post()的files參數(shù)即可。
實(shí)例:
?
6????超時(shí)和代理
Requests也支持方便構(gòu)建請(qǐng)求超時(shí)和代理設(shè)置,只需分別將請(qǐng)求數(shù)據(jù)傳遞給timeout和proxies即可,代碼實(shí)例:
?
三、Requests實(shí)際應(yīng)用
1.?網(wǎng)頁(yè)數(shù)據(jù)爬蟲(chóng),Requests能方便的構(gòu)建和發(fā)送基于HTTP協(xié)議的網(wǎng)絡(luò)請(qǐng)求,因此可以基于Requests來(lái)編寫爬蟲(chóng)腳本,爬取互聯(lián)網(wǎng)上目標(biāo)網(wǎng)站的網(wǎng)頁(yè),提取網(wǎng)頁(yè)源代碼中的圖片、文本、視頻等數(shù)據(jù),并可以將爬取的海量大數(shù)據(jù)應(yīng)用于數(shù)據(jù)分析
2.?在軟件測(cè)試項(xiàng)目中,可以用來(lái)構(gòu)建接口測(cè)試,完成不同接口測(cè)試腳本和執(zhí)行。
最后感謝每一個(gè)認(rèn)真閱讀我文章的人,看著粉絲一路的上漲和關(guān)注,禮尚往來(lái)總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
些資料,對(duì)于【軟件測(cè)試】的朋友來(lái)說(shuō)應(yīng)該是最全面最完整的備戰(zhàn)倉(cāng)庫(kù),這個(gè)倉(cāng)庫(kù)也陪伴上萬(wàn)個(gè)測(cè)試工程師們走過(guò)最艱難的路程,希望也能幫助到你!
在我的QQ技術(shù)交流群里(技術(shù)交流和資源共享,廣告勿擾)
?