Python接口測(cè)試之如何使用requests發(fā)起請(qǐng)求
認(rèn)識(shí)requests模塊
1、requests介紹
requests是一個(gè)第三方庫(kù),因此首先需要安裝這個(gè)庫(kù),安裝三步走:
- 安裝:pip install requests
- 在文件中引用這個(gè)模塊:import requests
- 使用這個(gè)庫(kù)發(fā)起一個(gè)請(qǐng)求(get請(qǐng)求、post請(qǐng)求等)
2、使用requests發(fā)起get或者post請(qǐng)求
- 使用requests的post方法發(fā)起post請(qǐng)求
import requests resp = requests.post(api_url,json=req_data)
- 使用requests的request方法發(fā)起post請(qǐng)求
import requests resp = requests.request("post",api_url,json=req_data)
說明:這樣做,每調(diào)用一次requests.request就會(huì)去實(shí)例化一次Session類
- 所有的請(qǐng)求都在一個(gè)會(huì)話當(dāng)中
如果是session鑒權(quán)或者coockies鑒權(quán),可以直接利用Session類實(shí)例化。
這樣做了就不用額外處理了,直接利用會(huì)話對(duì)象s發(fā)起請(qǐng)求,如下所示:
import requests s = requests.Session() resp = s.request(method,api_url,json=req_data)
3、關(guān)于post/put/delete請(qǐng)求中,data參數(shù)和json參數(shù)格式
- json參數(shù)
json參數(shù):requests庫(kù),針對(duì)請(qǐng)求體格式為application/json的,獨(dú)自寫了一個(gè)json參數(shù)的處理機(jī)制,數(shù)據(jù)類型是字典。因此,如果使用接送傳參,只需要將參數(shù)寫為字典的格式即可發(fā)起請(qǐng)求。
- data參數(shù)
data參數(shù):data為字典類型,默認(rèn)的請(qǐng)求體格式為的application/x-www-form-urlencoded。
4、Respobse對(duì)象
響應(yīng)數(shù)據(jù)返回主要有幾下幾類:
- resp.status_code -- 獲取響應(yīng)狀態(tài)碼
- resp.headers -- 獲取響應(yīng)頭
- resp.text -- 獲取響應(yīng)數(shù)據(jù)
- resp.json() -- 把json格式的響應(yīng)數(shù)據(jù),轉(zhuǎn)換成python字典
實(shí)戰(zhàn)
1、發(fā)起post請(qǐng)求
- 如何抓包獲取要模擬的接口詳情:
- 以下編寫代碼:
import requests # 請(qǐng)求url url = "https://openapiv5.ketangpai.com//UserApi/login" '''請(qǐng)求方法''' method = "post" # 如果是post請(qǐng)求,需要查看請(qǐng)求頭當(dāng)中的content-type的數(shù)據(jù)格式類型 '''請(qǐng)求體數(shù)據(jù)''' req_data = { "email":"18812345678", # 隨意寫的 "password":"f876543", # 隨意寫的非真實(shí) "remember":"0","code":"", "mobile":"", "type":"login", "reqtimestamp":1697007648530} '''第一種方法:使用requests的post方法發(fā)起post請(qǐng)求''' # rt = requests.post(url=url,json=req_data) # '''獲取響應(yīng)的原始數(shù)據(jù)''' # print(rt.text) # '''查看獲取響應(yīng)的原始數(shù)據(jù)的數(shù)據(jù)類型''' # print(type(rt)) # <class 'requests.models.Response'> # '''把響應(yīng)的json數(shù)據(jù),轉(zhuǎn)換成python字典。''' # print(rt.json()) # print(type(rt.json())) # 字典類型 # print(rt.status_code,"\n",rt.headers,"\n\n",rt.cookies) '''第二種方法:使用request方法發(fā)送post請(qǐng)求''' respose = requests.request(method,url,json=req_data) print(respose.text) # 結(jié)果與上述一致 ''' 使用session方法進(jìn)行請(qǐng)求數(shù)據(jù) ''' s = requests.Session() resp = s.request(method,url,json=req_data) print("http響應(yīng)數(shù)據(jù)(原始):",resp.text)
2、發(fā)起get請(qǐng)求
盤點(diǎn)一下get請(qǐng)求的參數(shù):
- params參數(shù):get請(qǐng)求,請(qǐng)求參數(shù)一般是拼接在url后面的,因此請(qǐng)求參數(shù)使用params參數(shù)(字典類型)
- headers參數(shù):字典類型。用戶項(xiàng)目需要添加到請(qǐng)求頭的,傳參給它。
- verify參數(shù):遇到發(fā)起https請(qǐng)求的時(shí)候,要證書。 將verify=False就可以關(guān)掉證書要求,可以發(fā)送https請(qǐng)求
代碼實(shí)戰(zhàn)
1、抓包找到我們要做get請(qǐng)求實(shí)戰(zhàn)的接口
2、使用代碼編寫get請(qǐng)求發(fā)送
注意:接口連貫時(shí),需要添加鏈接點(diǎn)“token”,才可以獲取響應(yīng)的完整信息
from time import sleep import requests # 請(qǐng)求url url = "https://openapiv5.ketangpai.com//UserApi/login" '''請(qǐng)求方法''' method = "post" # 如果是post請(qǐng)求,需要查看請(qǐng)求頭當(dāng)中的content-type的數(shù)據(jù)格式類型 '''請(qǐng)求體數(shù)據(jù)''' req_data = { "email":"18829489142", "password":"fangbang666", "remember":"0","code":"", "mobile":"", "type":"login", "reqtimestamp":1697007648530} ''' 連續(xù)上個(gè)文件的post請(qǐng)求,從登錄接口中獲取token ''' ''' 使用session方法進(jìn)行請(qǐng)求數(shù)據(jù) ''' s = requests.Session() resp = s.request(method,url,json=req_data) # print("http響應(yīng)數(shù)據(jù)(原始):",resp.text) # print(resp.json()) # 獲取token,提供給下文 token = resp.json()["data"]["token"] # 暫停6秒針 sleep(6) url = "https://openapiv5.ketangpai.com//TourApi/isTourV2" method = "get" params = { "version" : 32, "courseid" : "MDAwMDAwMDAwMLOGy5WHqbdshNtyoQ" } # 往請(qǐng)求頭里面,添加鑒權(quán)的token處理 headers = {"token":token} # 發(fā)請(qǐng)求的時(shí)候,帶上請(qǐng)求頭 res = requests.request(method,url,params=params,headers=headers) print(res.text)
結(jié)果如下:
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 如何使用find和find_all爬蟲、找文本的實(shí)現(xiàn)
這篇文章主要介紹了python 如何使用find和find_all,爬蟲、找文本,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10使用python實(shí)現(xiàn)省市三級(jí)菜單效果
本文給大家分享的是使用使用python實(shí)現(xiàn)省市三級(jí)菜單效果的代碼,非常的實(shí)用,有需要的小伙伴可以參考下。2016-01-01python實(shí)現(xiàn)網(wǎng)站微信登錄的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)網(wǎng)站微信登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Python2實(shí)現(xiàn)的LED大數(shù)字顯示效果示例
這篇文章主要介紹了Python2實(shí)現(xiàn)的LED大數(shù)字顯示效果,涉及Python的簡(jiǎn)單交互與列表相關(guān)使用技巧,需要的朋友可以參考下2017-09-09Python學(xué)習(xí)小技巧之列表項(xiàng)的拼接
這篇文章主要給大家介紹了Python學(xué)習(xí)小技巧之列表項(xiàng)的拼接的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05Python基于進(jìn)程池實(shí)現(xiàn)多進(jìn)程過程解析
這篇文章主要介紹了Python基于進(jìn)程池實(shí)現(xiàn)多進(jìn)程過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Python報(bào)mongod:?error?while?loading?shared?libraries:?l
這篇文章主要介紹的是Python報(bào)mongod:?error?while?loading?shared?libraries:?libcrypto.so.1.1的解決方法,下面文章解決過程,需要的小伙伴可以參考一下2022-02-02