免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
利用Python requests庫實(shí)現(xiàn)cas認(rèn)證
1.準(zhǔn)備工作-背景知識(shí)
1.1 requests庫簡(jiǎn)介:
python有很多可以用來測(cè)試接口的模塊,個(gè)人覺得,requests庫是最好用的, 在Robot Framwork里,它的測(cè)試庫requestsLibrary,也是基于requests寫的。
1.1.1 安裝:
作為第三方模塊,使用前,需要安裝,最簡(jiǎn)單的安裝方式如下
pip install requests
1.1.2 語法(簡(jiǎn)明版):
1)如何發(fā)送請(qǐng)求 :
發(fā)送get請(qǐng)求:requests.get(url, params,? headers, cookies, verify, allow_redirects...)
發(fā)送post請(qǐng)求: requests.post(url, params, data, headers, cookies, verify, allow_redirects...)
*****以上只有url參數(shù)是必填的,其他可以根據(jù)需要選填
*****除了get和post,還支持其他http請(qǐng)求,比如delete等等,不過在我們的cas認(rèn)證中,只需要get和post;而且一般的接口測(cè)試中,最常用的也就是get和post消息
2)如何得到響應(yīng):
假設(shè)發(fā)送了一個(gè)請(qǐng)求:
r=requests.get(url, params,? headers, cookies, verify, allow_redirects...)
那么以下是返回結(jié)果:
r.headers? 返回的頭信息
r.text? 返回的主體
r.status_code 返回的狀態(tài)碼
1.1.3 基于requests庫,重寫get和post請(qǐng)求
為了讓requests庫更能符合我們的需求,進(jìn)行了簡(jiǎn)單的封裝,重寫了get和post請(qǐng)求發(fā)送:
設(shè)置了常用的headers參數(shù)
sesssion_id作為參數(shù)傳入
對(duì)于post消息,會(huì)根據(jù)data值,設(shè)置Content-Length
12345678910111213141516171819202122232425262728293031323334353637383940414243444546#encoding=utf-8?import?requests?class?RestfulTest(object):?????@staticmethod?????def?send_get_request(url, params=?None, session_id=?None, verify?=?False?, allow_redirects=?False):?????????#disable warnings?????????requests.packages.urllib3.disable_warnings()?????????if?params?==?None:????????????params?=?{}?????????if?session_id?==?None:????????????cookies?=?{}?????????else:????????????cookies?=?{'JSESSIONID':session_id}?????????headers?=?{??????????????"Accept":?"text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8",??????????????"Accept-Language":?"en-US,en;q=0.5",??????????????"Connection":?"keep-alive",??????????????"User-Agent":?"Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0",?????????????}?????????get_response?=?requests.get(url, params=params,? headers=headers, cookies=cookies, verify=verify, allow_redirects=allow_redirects)?????????return?get_response??????@staticmethod?????def?send_post_request(url, params=?None, data=?None, session_id=?None, verify=?False, allow_redirects=False):????????#disable warnings????????requests.packages.urllib3.disable_warnings()????????if?params?==?None:????????????params?=?{}????????if?data?==?None:????????????data?=?{}????????if?session_id?==?None:????????????cookies?=?{}????????else:????????????cookies?=?{'JSESSIONID':session_id}????????headers?=?{??????????????"Accept":?"text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8",??????????????"Accept-Language":?"en-US,en;q=0.5",??????????????"Connection":?"keep-alive",??????????????"User-Agent":?"Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0",??????????????"Content-Type":?"application/x-www-form-urlencoded; charset=UTF-8",??????????????"Content-Length":?str(len(data))?????????????}????????post_response?=?requests.post(url, params=params, data=data, headers=headers, cookies=cookies, verify=verify, allow_redirects=allow_redirects)????????return?post_response
1.2?cas 認(rèn)證原理
CAS旨在為 Web 應(yīng)用系統(tǒng)提供一種可靠的單點(diǎn)登錄方法
Single Sign On,簡(jiǎn)稱SSO,SSO使得在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)
從結(jié)構(gòu)上看,CAS 包含兩個(gè)部分: CAS Server 和 CAS Client。
CAS Server 需要獨(dú)立部署,主要負(fù)責(zé)對(duì)用戶的認(rèn)證工作;CAS Client 負(fù)責(zé)處理對(duì)客戶端受保護(hù)資源的訪問請(qǐng)求,需要登錄時(shí),重定向到 CAS Server
CAS Client 與受保護(hù)的客戶端應(yīng)用部署在一起,以 Filter 方式保護(hù)受保護(hù)的資源。對(duì)于訪問受保護(hù)資源的每個(gè) Web 請(qǐng)求,CAS Client 會(huì)分析該請(qǐng)求的 Http 請(qǐng)求中是否包含 Service Ticket,如果沒有,則說明當(dāng)前用戶尚未登錄,于是將請(qǐng)求重定向到指定好的 CAS Server 登錄地址,并傳遞 Service (也就是要訪問的目的資源地址),以便登錄成功過后轉(zhuǎn)回該地址用戶在第 3 步中輸入認(rèn)證信息,如果登錄成功,CAS Server 隨機(jī)產(chǎn)生一個(gè)相當(dāng)長(zhǎng)度、唯一、不可偽造的 Service Ticket,并緩存以待將來驗(yàn)證,之后系統(tǒng)自動(dòng)重定向到 Service 所在地址,并為客戶端瀏覽器設(shè)置一個(gè) Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新產(chǎn)生的 Ticket 過后,在第 5,6 步中與 CAS Server進(jìn)行身份合適,以確保 Service Ticket 的合法性
在該協(xié)議中,所有與 CAS 的交互均采用 SSL 協(xié)議,確保ST 和 TGC 的安全性。協(xié)議工作過程中會(huì)有 2 次重定向的過程,但是 CAS Client 與 CAS Server 之間進(jìn)行 Ticket 驗(yàn)證的過程對(duì)于用戶是透明的。
總結(jié)一下,如下:訪問服務(wù): SSO 客戶端發(fā)送請(qǐng)求訪問應(yīng)用系統(tǒng)提供的服務(wù)資源。
定向認(rèn)證: SSO 客戶端會(huì)重定向用戶請(qǐng)求到 SSO 服務(wù)器。
用戶認(rèn)證:用戶身份認(rèn)證。
發(fā)放票據(jù): SSO 服務(wù)器會(huì)產(chǎn)生一個(gè)隨機(jī)的 Service Ticket 。
驗(yàn)證票據(jù): SSO 服務(wù)器驗(yàn)證票據(jù) Service Ticket 的合法性,驗(yàn)證通過后,允許客戶端訪問服務(wù)。
傳輸用戶信息: SSO 服務(wù)器驗(yàn)證票據(jù)通過后,傳輸用戶認(rèn)證結(jié)果信息給客戶端。
2. python代碼實(shí)現(xiàn)cas認(rèn)證
以下代碼實(shí)現(xiàn)的是我們被測(cè)server的cas登錄,不同產(chǎn)品,獲得cookie值方式可能有所不同,post的data值可能也有所不同,但是大致原理是一致的
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#usr/bin/env python#encoding=utf-8?from?restfulTest?import?RestfulTestfrom?dataProcess?import?DataProcess?class?LoginToServer(object):?????????@staticmethod????def?get_service_sessionId_redirectUrl(service_url):????????response?=?RestfulTest.send_get_request(service_url)????????cookieValue?=?response.headers['set-cookie']????????redirectUrl?=?response.headers['location']????????sessionId?=?DataProcess.get_first_matching_group_by_pattern(cookieValue,?'JSESSIONID=(\w ); Path')?????????return?sessionId, redirectUrl?????????@staticmethod????def?cas_server_authentication(cas_server_url, userName="admin", userPasswd="admin"):?????????????response1?=?RestfulTest.send_get_request(cas_server_url)?????????????????cas_server_sessionId?=?DataProcess.get_first_matching_group_by_pattern(response1.headers['set-cookie'],?'JSESSIONID=(\w ); Path')?????????submitLt?=?DataProcess.get_first_matching_group_by_pattern(response1.content,?'name="lt" value="(\w )"')????????http_data_for_auth?=?"username=" userName "&password=" userPasswd "&lt=" submitLt "&_eventId=submit&submit=Log In"?????????????????response2?=?RestfulTest.send_post_request(cas_server_url, data?=?http_data_for_auth, session_id?=?cas_server_sessionId )???????????acceptLt=?DataProcess.get_first_matching_group_by_pattern(response2.content,?'name="lt" value="(\w )"')????????http_data_for_confirm?="_eventId_accept=Accept&lt=" acceptLt?????????response3?=?RestfulTest.send_post_request(cas_server_url, data?=?http_data_for_confirm, session_id?=?cas_server_sessionId )?????????casTicket?=?DataProcess.get_first_matching_group_by_pattern(response3.headers['set-cookie'],?'CASTGC=(\S ); Path=\/irisCAS; Secure')????????redirectUrl?=?response3.headers['location']?????????return???cas_server_sessionId, casTicket, redirectUrl?????@staticmethod????def?redirect_to_service(service_url, service_sessionId):????????response?=?RestfulTest.send_get_request(service_url, session_id?=?service_sessionId, allow_redirects=?True)????????return?response?????@staticmethod????def?login_to_service(service_url, userName="admin", userPasswd="admin"):????????service_sessionId, redirectToCas?=?LoginToServer.get_service_sessionId_redirectUrl(service_url)????????cas_server_sessionId, casTicket,? redirectToServer?=?LoginToServer.cas_server_authentication(redirectToCas, userName, userPasswd)????????response?=?LoginToServer.redirect_to_service(redirectToServer, service_sessionId)????????if?response.status_code?==?200:????????????print?"Login To Service Success"????????else:????????????print?"Login To Service Fail"????????return?service_sessionId
1.準(zhǔn)備工作-背景知識(shí)
1.1 requests庫簡(jiǎn)介:
python有很多可以用來測(cè)試接口的模塊,個(gè)人覺得,requests庫是最好用的, 在Robot Framwork里,它的測(cè)試庫requestsLibrary,也是基于requests寫的。
1.1.1 安裝:
作為第三方模塊,使用前,需要安裝,最簡(jiǎn)單的安裝方式如下
pip install requests
1.1.2 語法(簡(jiǎn)明版):
1)如何發(fā)送請(qǐng)求 :
發(fā)送get請(qǐng)求:requests.get(url, params,? headers, cookies, verify, allow_redirects...)
發(fā)送post請(qǐng)求: requests.post(url, params, data, headers, cookies, verify, allow_redirects...)
*****以上只有url參數(shù)是必填的,其他可以根據(jù)需要選填
*****除了get和post,還支持其他http請(qǐng)求,比如delete等等,不過在我們的cas認(rèn)證中,只需要get和post;而且一般的接口測(cè)試中,最常用的也就是get和post消息
2)如何得到響應(yīng):
假設(shè)發(fā)送了一個(gè)請(qǐng)求:
r=requests.get(url, params,? headers, cookies, verify, allow_redirects...)
那么以下是返回結(jié)果:
r.headers? 返回的頭信息
r.text? 返回的主體
r.status_code 返回的狀態(tài)碼
1.1.3 基于requests庫,重寫get和post請(qǐng)求
為了讓requests庫更能符合我們的需求,進(jìn)行了簡(jiǎn)單的封裝,重寫了get和post請(qǐng)求發(fā)送:
設(shè)置了常用的headers參數(shù)
sesssion_id作為參數(shù)傳入
對(duì)于post消息,會(huì)根據(jù)data值,設(shè)置Content-Length
12345678910111213141516171819202122232425262728293031323334353637383940414243444546#encoding=utf-8?import?requests?class?RestfulTest(object):?????@staticmethod?????def?send_get_request(url, params=?None, session_id=?None, verify?=?False?, allow_redirects=?False):?????????#disable warnings?????????requests.packages.urllib3.disable_warnings()?????????if?params?==?None:????????????params?=?{}?????????if?session_id?==?None:????????????cookies?=?{}?????????else:????????????cookies?=?{'JSESSIONID':session_id}?????????headers?=?{??????????????"Accept":?"text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8",??????????????"Accept-Language":?"en-US,en;q=0.5",??????????????"Connection":?"keep-alive",??????????????"User-Agent":?"Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0",?????????????}?????????get_response?=?requests.get(url, params=params,? headers=headers, cookies=cookies, verify=verify, allow_redirects=allow_redirects)?????????return?get_response??????@staticmethod?????def?send_post_request(url, params=?None, data=?None, session_id=?None, verify=?False, allow_redirects=False):????????#disable warnings????????requests.packages.urllib3.disable_warnings()????????if?params?==?None:????????????params?=?{}????????if?data?==?None:????????????data?=?{}????????if?session_id?==?None:????????????cookies?=?{}????????else:????????????cookies?=?{'JSESSIONID':session_id}????????headers?=?{??????????????"Accept":?"text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8",??????????????"Accept-Language":?"en-US,en;q=0.5",??????????????"Connection":?"keep-alive",??????????????"User-Agent":?"Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0",??????????????"Content-Type":?"application/x-www-form-urlencoded; charset=UTF-8",??????????????"Content-Length":?str(len(data))?????????????}????????post_response?=?requests.post(url, params=params, data=data, headers=headers, cookies=cookies, verify=verify, allow_redirects=allow_redirects)????????return?post_response
1.2?cas 認(rèn)證原理
CAS旨在為 Web 應(yīng)用系統(tǒng)提供一種可靠的單點(diǎn)登錄方法
Single Sign On,簡(jiǎn)稱SSO,SSO使得在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)
從結(jié)構(gòu)上看,CAS 包含兩個(gè)部分: CAS Server 和 CAS Client。
CAS Server 需要獨(dú)立部署,主要負(fù)責(zé)對(duì)用戶的認(rèn)證工作;CAS Client 負(fù)責(zé)處理對(duì)客戶端受保護(hù)資源的訪問請(qǐng)求,需要登錄時(shí),重定向到 CAS Server
CAS Client 與受保護(hù)的客戶端應(yīng)用部署在一起,以 Filter 方式保護(hù)受保護(hù)的資源。對(duì)于訪問受保護(hù)資源的每個(gè) Web 請(qǐng)求,CAS Client 會(huì)分析該請(qǐng)求的 Http 請(qǐng)求中是否包含 Service Ticket,如果沒有,則說明當(dāng)前用戶尚未登錄,于是將請(qǐng)求重定向到指定好的 CAS Server 登錄地址,并傳遞 Service (也就是要訪問的目的資源地址),以便登錄成功過后轉(zhuǎn)回該地址用戶在第 3 步中輸入認(rèn)證信息,如果登錄成功,CAS Server 隨機(jī)產(chǎn)生一個(gè)相當(dāng)長(zhǎng)度、唯一、不可偽造的 Service Ticket,并緩存以待將來驗(yàn)證,之后系統(tǒng)自動(dòng)重定向到 Service 所在地址,并為客戶端瀏覽器設(shè)置一個(gè) Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新產(chǎn)生的 Ticket 過后,在第 5,6 步中與 CAS Server進(jìn)行身份合適,以確保 Service Ticket 的合法性
在該協(xié)議中,所有與 CAS 的交互均采用 SSL 協(xié)議,確保ST 和 TGC 的安全性。協(xié)議工作過程中會(huì)有 2 次重定向的過程,但是 CAS Client 與 CAS Server 之間進(jìn)行 Ticket 驗(yàn)證的過程對(duì)于用戶是透明的。
總結(jié)一下,如下:訪問服務(wù): SSO 客戶端發(fā)送請(qǐng)求訪問應(yīng)用系統(tǒng)提供的服務(wù)資源。
定向認(rèn)證: SSO 客戶端會(huì)重定向用戶請(qǐng)求到 SSO 服務(wù)器。
用戶認(rèn)證:用戶身份認(rèn)證。
發(fā)放票據(jù): SSO 服務(wù)器會(huì)產(chǎn)生一個(gè)隨機(jī)的 Service Ticket 。
驗(yàn)證票據(jù): SSO 服務(wù)器驗(yàn)證票據(jù) Service Ticket 的合法性,驗(yàn)證通過后,允許客戶端訪問服務(wù)。
傳輸用戶信息: SSO 服務(wù)器驗(yàn)證票據(jù)通過后,傳輸用戶認(rèn)證結(jié)果信息給客戶端。
2. python代碼實(shí)現(xiàn)cas認(rèn)證
以下代碼實(shí)現(xiàn)的是我們被測(cè)server的cas登錄,不同產(chǎn)品,獲得cookie值方式可能有所不同,post的data值可能也有所不同,但是大致原理是一致的
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#usr/bin/env python#encoding=utf-8?from?restfulTest?import?RestfulTestfrom?dataProcess?import?DataProcess?class?LoginToServer(object):?????????@staticmethod????def?get_service_sessionId_redirectUrl(service_url):????????response?=?RestfulTest.send_get_request(service_url)????????cookieValue?=?response.headers['set-cookie']????????redirectUrl?=?response.headers['location']????????sessionId?=?DataProcess.get_first_matching_group_by_pattern(cookieValue,?'JSESSIONID=(\w ); Path')?????????return?sessionId, redirectUrl?????????@staticmethod????def?cas_server_authentication(cas_server_url, userName="admin", userPasswd="admin"):?????????????response1?=?RestfulTest.send_get_request(cas_server_url)?????????????????cas_server_sessionId?=?DataProcess.get_first_matching_group_by_pattern(response1.headers['set-cookie'],?'JSESSIONID=(\w ); Path')?????????submitLt?=?DataProcess.get_first_matching_group_by_pattern(response1.content,?'name="lt" value="(\w )"')????????http_data_for_auth?=?"username=" userName "&password=" userPasswd "&lt=" submitLt "&_eventId=submit&submit=Log In"?????????????????response2?=?RestfulTest.send_post_request(cas_server_url, data?=?http_data_for_auth, session_id?=?cas_server_sessionId )???????????acceptLt=?DataProcess.get_first_matching_group_by_pattern(response2.content,?'name="lt" value="(\w )"')????????http_data_for_confirm?="_eventId_accept=Accept&lt=" acceptLt?????????response3?=?RestfulTest.send_post_request(cas_server_url, data?=?http_data_for_confirm, session_id?=?cas_server_sessionId )?????????casTicket?=?DataProcess.get_first_matching_group_by_pattern(response3.headers['set-cookie'],?'CASTGC=(\S ); Path=\/irisCAS; Secure')????????redirectUrl?=?response3.headers['location']?????????return???cas_server_sessionId, casTicket, redirectUrl?????@staticmethod????def?redirect_to_service(service_url, service_sessionId):????????response?=?RestfulTest.send_get_request(service_url, session_id?=?service_sessionId, allow_redirects=?True)????????return?response?????@staticmethod????def?login_to_service(service_url, userName="admin", userPasswd="admin"):????????service_sessionId, redirectToCas?=?LoginToServer.get_service_sessionId_redirectUrl(service_url)????????cas_server_sessionId, casTicket,? redirectToServer?=?LoginToServer.cas_server_authentication(redirectToCas, userName, userPasswd)????????response?=?LoginToServer.redirect_to_service(redirectToServer, service_sessionId)????????if?response.status_code?==?200:????????????print?"Login To Service Success"????????else:????????????print?"Login To Service Fail"????????return?service_sessionId
來源:http://www.icode9.com/content-1-185951.html
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
《上海悠悠接口自動(dòng)化平臺(tái)》-1.新增API 與 各參數(shù)的描述
cookie在爬蟲中的應(yīng)用
WebRequest和WebBrowser同時(shí)登陸,使用同一個(gè)sessionID
ASP.NET整理:Cookie,Application,Session,頁面生命周期
接口自動(dòng)化測(cè)試之-requests模塊詳解
盤點(diǎn)一個(gè)Python網(wǎng)絡(luò)爬蟲抓取股票代碼問題(上篇)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服