最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python接口自動(dòng)化淺析Token應(yīng)用原理

 更新時(shí)間:2021年08月24日 16:59:20   作者:軟件測(cè)試自動(dòng)化測(cè)試  
本文主要介紹token基本概念、運(yùn)行原理及在自動(dòng)化中接口如何攜帶token進(jìn)行訪問(wèn),附含源碼,內(nèi)容非常詳細(xì)易理解,有需要的朋友可以參考下

在之前的Python接口自動(dòng)化測(cè)試系列文章:Python接口自動(dòng)化之cookie、session應(yīng)用詳解,介紹了cookie、session原理及在自動(dòng)化過(guò)程中如何利用cookie、session保持會(huì)話狀態(tài)。

以下介紹Token原理及在自動(dòng)化中的應(yīng)用。

一、Token基本概念及原理

1、Token作用

為了驗(yàn)證用戶登錄情況以及減輕服務(wù)器的壓力,減少頻繁的查詢數(shù)據(jù)庫(kù),使服務(wù)器更加健壯。

2、什么是Token

Token是服務(wù)端生成的一串字符串,以作客戶端進(jìn)行請(qǐng)求的一個(gè)令牌,當(dāng)?shù)谝淮蔚卿浐?,服?wù)器生成一個(gè)Token便將此Token返回給客戶端,以后客戶端只需帶上這個(gè)Token前來(lái)請(qǐng)求數(shù)據(jù)即可,無(wú)需再次帶上用戶名和密碼。

3、Token運(yùn)行原理

1.當(dāng)用戶首次登錄成功之后, 服務(wù)器端就會(huì)生成一個(gè) token 值,這個(gè)值會(huì)在服務(wù)器保存token值(保存在數(shù)據(jù)庫(kù)中),再將這個(gè)token值返回給客戶端;

2.客戶端拿到 token 值之后,進(jìn)行保存 (保存位置由服務(wù)器端設(shè)置);

3.以后客戶端再次發(fā)送網(wǎng)絡(luò)請(qǐng)求(一般不是登錄請(qǐng)求)的時(shí)候,就會(huì)將這個(gè) token 值附帶到參數(shù)中發(fā)送給服務(wù)器;

4.服務(wù)器接收到客戶端的請(qǐng)求之后,會(huì)取出token值與保存在本地(數(shù)據(jù)庫(kù))中的token值進(jìn)行比較;

5.如果兩個(gè) token 值相同, 說(shuō)明用戶登錄成功過(guò),當(dāng)前用戶處于登錄狀態(tài);

6.如果沒(méi)有這個(gè) token 值, 沒(méi)有登錄成功;

7.如果 token 值不同,說(shuō)明原來(lái)的登錄信息已經(jīng)失效,讓用戶重新登錄;

4、Token認(rèn)證優(yōu)點(diǎn)

無(wú)狀態(tài)(也稱:服務(wù)端可擴(kuò)展行):Token機(jī)制在服務(wù)端不需要存儲(chǔ)session信息,因?yàn)門oken 自身包含了所有登錄用戶的信息,只需要在客戶端的cookie或本地介質(zhì)存儲(chǔ)狀態(tài)信息.

可重用性:在多個(gè)平臺(tái)和域(domains)上運(yùn)行,重復(fù)使用相同的令牌來(lái)驗(yàn)證用戶,很容易構(gòu)建與其他應(yīng)用程序共享權(quán)限的應(yīng)用程序。

安全性:由于我們沒(méi)有使用 Cookies,我們不必再防御網(wǎng)站的跨站點(diǎn)請(qǐng)求偽造(CSRF)攻擊。

5、Token和 Cookie、Session 的選型

對(duì)于只需要登錄用戶并訪問(wèn)存儲(chǔ)在站點(diǎn)數(shù)據(jù)庫(kù)中的一些信息的中小型網(wǎng)站來(lái)說(shuō),Session Cookies 通常就能滿足。如果有企業(yè)級(jí)站點(diǎn),應(yīng)用程序或附近的站點(diǎn),并且需要處理大量的請(qǐng)求,尤其是第三方或很多第三方(包括位于不同域的API),則 token顯然更適合。

二、Token實(shí)戰(zhàn)

講了那么多概念和原理,很多小伙伴可能不知道token長(zhǎng)啥樣,接下來(lái)以接口登錄為例。

import requests
url = 'http://127.0.0.1:8000/user/login/'
payload = {
    "username":"vivi",
    "password":"123456"
}
res = requests.post(url,json=payload)
print(res.text)

響應(yīng)結(jié)果如下:

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InZpdmkiLCJleHAiOjE1ODY4NDg5NzgsImVtYWlsIjoidml2aUBxcS5jb20ifQ.a2ExtNVjGrY8T1gefcJTnk4JUOx9NVtCk6lMK8o47co",
  "user_id": 1,
  "username": "vivi"
}

響應(yīng)結(jié)果有返回token,但是token要怎么用呢,不急,我們一步步來(lái)。

假設(shè)現(xiàn)在有個(gè)項(xiàng)目列表的接口,在不登錄的前提下,不能訪問(wèn)。

import requests
url = 'http://127.0.0.1:8000/projects/'
pro_res = requests.get(url)
print(pro_res.json())

響應(yīng)結(jié)果:提供認(rèn)證信息

{'detail': '身份認(rèn)證信息未提供。'}

項(xiàng)目列表接口需要攜帶token,服務(wù)器校驗(yàn)成功后,才能成功返回信息

重點(diǎn)來(lái)了,如何從登錄接口獲取token,項(xiàng)目列表接口又如何攜帶token?

訪問(wèn)登錄接口,并獲取token。

import requests
url = 'http://127.0.0.1:8000/user/login/'
payload = {
    "username":"vivi",
    "password":"123456"
}
login_res = requests.post(url,json=payload)
# 從響應(yīng)結(jié)果中獲取token值
token = login_res.json()["token"]
print("token:", token)

響應(yīng)結(jié)果為:

token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InZpdmkiLCJleHAiOjE1ODY4NTEyMjksImVtYWlsIjoidml2aUBxcS5jb20ifQ.neqVM5MFGuFbKIUOCqW_qXBajhTTQMfmAs2PWTkEMes

那項(xiàng)目列表接口又如何攜帶token呢,token直接加在請(qǐng)求頭,這樣就可以了么,當(dāng)然不是,我們還需要在token前加上前綴,前綴由后端設(shè)置,見(jiàn)過(guò)最多的前綴是:Bearer,不清楚的參照接口文檔。

項(xiàng)目列表攜帶token訪問(wèn)。

import requests
url = 'http://127.0.0.1:8000/projects/'
# 拼接最終的token,注意中間有個(gè)空格
token = "Bearer" + " " + token
headers={
    "authorization": token
}
pro_res = requests.get(url,headers=headers)
print(pro_res.json())

響應(yīng)結(jié)果為:

{
    "count": 2,
    "results": [
        {
            "id": 1,
            "name": "自動(dòng)化測(cè)試平臺(tái)項(xiàng)目1",
            "tester": "vivi"
        },
        {
            "id": 2,
            "name": "自動(dòng)化測(cè)試平臺(tái)項(xiàng)目2",
            "tester": "coco"
        }
    ],
    "total_pages": 1,
    "current_page_num": 1
}

到此這篇關(guān)于Python接口自動(dòng)化之淺析requests模塊post請(qǐng)求的文章就介紹到這了,更多相關(guān)Python接口自動(dòng)化equests模塊post請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中的struct.unpack示例詳解

    Python中的struct.unpack示例詳解

    在Python中,struct.unpack是一個(gè)函數(shù),用于將字節(jié)串轉(zhuǎn)換為元組,這個(gè)函數(shù)在處理二進(jìn)制數(shù)據(jù)時(shí)非常有用,這篇文章主要介紹了Python中的struct.unpack示例詳解,需要的朋友可以參考下
    2023-12-12
  • Python 自動(dòng)備份腳本的示例代碼

    Python 自動(dòng)備份腳本的示例代碼

    這篇文章主要介紹了Python 自動(dòng)備份腳本,本文結(jié)合代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Python面向?qū)ο蠓庋b操作案例詳解

    Python面向?qū)ο蠓庋b操作案例詳解

    這篇文章主要介紹了Python面向?qū)ο蠓庋b操作,結(jié)合具體案例形式詳細(xì)分析了Python面向?qū)ο蟮姆庋b、擴(kuò)展等操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • 使用Python實(shí)現(xiàn)MP3格式轉(zhuǎn)化

    使用Python實(shí)現(xiàn)MP3格式轉(zhuǎn)化

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)MP3格式轉(zhuǎn)化為wav,flac和ogg等,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2025-01-01
  • Python?matplotlib繪圖時(shí)使用鼠標(biāo)滾輪放大/縮小圖像

    Python?matplotlib繪圖時(shí)使用鼠標(biāo)滾輪放大/縮小圖像

    Matplotlib是Python程序員可用的事實(shí)上的繪圖庫(kù),雖然它比交互式繪圖庫(kù)在圖形上更簡(jiǎn)單,但它仍然可以一個(gè)強(qiáng)大的工具,下面這篇文章主要給大家介紹了關(guān)于Python?matplotlib繪圖時(shí)使用鼠標(biāo)滾輪放大/縮小圖像的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Python實(shí)戰(zhàn)之單詞打卡統(tǒng)計(jì)

    Python實(shí)戰(zhàn)之單詞打卡統(tǒng)計(jì)

    這篇文章主要介紹了Python實(shí)戰(zhàn)之單詞打卡統(tǒng)計(jì),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • pandas和spark dataframe互相轉(zhuǎn)換實(shí)例詳解

    pandas和spark dataframe互相轉(zhuǎn)換實(shí)例詳解

    這篇文章主要介紹了pandas和spark dataframe互相轉(zhuǎn)換實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python爬蟲新手入門之初學(xué)lxml庫(kù)

    Python爬蟲新手入門之初學(xué)lxml庫(kù)

    這篇文章主要給大家介紹了關(guān)于Python爬蟲新手入門之初學(xué)lxml庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python 按比例獲取樣本數(shù)據(jù)或執(zhí)行任務(wù)的實(shí)現(xiàn)代碼

    Python 按比例獲取樣本數(shù)據(jù)或執(zhí)行任務(wù)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python 按比例獲取樣本數(shù)據(jù)或執(zhí)行任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 編寫同時(shí)兼容Python2.x與Python3.x版本的代碼的幾個(gè)示例

    編寫同時(shí)兼容Python2.x與Python3.x版本的代碼的幾個(gè)示例

    這篇文章主要介紹了編寫同時(shí)兼容Python2.x與Python3.x版本的代碼的幾個(gè)示例,在Python2.7.x的更新中由于采用了某些Python3中的代碼編寫特性、使得在有些原本不同之處編寫兼容性代碼成為可能,需要的朋友可以參考下
    2015-03-03

最新評(píng)論

井冈山市| 新晃| 博兴县| 霍山县| 长汀县| 台南市| 钟山县| 吐鲁番市| 顺平县| 怀仁县| 和硕县| 南雄市| 宁陵县| 玉林市| 平山县| 伊宁县| 萨迦县| 三门峡市| 阜阳市| 宁晋县| 蒙自县| 云梦县| 宽甸| 上林县| 苗栗市| 天气| 阳春市| 方城县| 锡林郭勒盟| 宜良县| 永和县| 顺平县| 宜宾市| 修文县| 桦甸市| 梁山县| 黔西县| 化德县| 丹东市| 通化县| 罗江县|