欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中如何實(shí)現(xiàn)MOOC掃碼登錄

 更新時(shí)間:2023年01月06日 09:21:19   作者:_ccd_yuan_  
這篇文章主要介紹了Python中如何實(shí)現(xiàn)MOOC掃碼登錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1、基本原理

  • 訪問網(wǎng)站掃碼登錄頁,網(wǎng)站給瀏覽器返回一個(gè)二維碼和一個(gè)唯一標(biāo)志KEY
  • 瀏覽器開啟定時(shí)輪詢服務(wù)器,確認(rèn)KEY對(duì)應(yīng)的掃碼結(jié)果
  • 用戶使用app掃碼二維碼,app獲取KEY并告知服務(wù)器已掃碼
  • App確認(rèn)登陸(包含個(gè)性化校驗(yàn)過程),服務(wù)器更新KEY的校驗(yàn)結(jié)果
  • 瀏覽器輪詢結(jié)果成功,獲得一次性token
  • 帶上token請(qǐng)求資源,獲得有效cookie,正常訪問資源。

2、代碼實(shí)現(xiàn)

我們以MOOC為例

1、訪問網(wǎng)站掃碼登錄頁,并下載二維碼

session = requests.session()
url = 'https://www.icourse163.org/logonByQRCode/code.do?width=182&height=182'   # 掃碼登錄url
header = {
    'referer': 'https://www.icourse163.org/',
    'user-agent': ua
}
resp = session.get(url,headers = header).json()		# 拿到相應(yīng)的json數(shù)據(jù)
codeUrl = resp['result']['codeUrl']				# 提取二維碼url及唯一標(biāo)志key
pollKey = resp['result']['pollKey']
codejpg = session.get(codeUrl)				# 請(qǐng)求二維碼
with open('text.jpg','wb') as f:			# 下載二維碼
    f.write(codejpg.content)

2、模擬輪詢

利用已得的唯一標(biāo)志key對(duì)服務(wù)器發(fā)起定時(shí)輪詢,獲得相應(yīng)數(shù)據(jù)

通過分析,codeStatus的值為0是表示,等待掃碼;codeStatus的值為1是表示,已掃碼,等待確認(rèn)登錄;codeStatus的值為2是表示,掃碼成功,此時(shí)服務(wù)器會(huì)返回token,這個(gè)對(duì)我們很有用

checkUrl = f'https://www.icourse163.org/logonByQRCode/poll.do?pollKey={pollKey}'
os.system('start text.jpg')
token = None
for i in range(20):				# 模擬輪詢
    checkResp = session.get(checkUrl,headers = header).json()
    if checkResp['result']['codeStatus'] == 2:
        token = checkResp['result']['token']		# 提取token
    else:
        time.sleep(1)			# 每秒一次

3、彈出二維碼,掃碼登錄

os.system('start text.jpg')

4、帶上token請(qǐng)求資源

獲得有效cookie,正常訪問資源。

vaildateUrl = f'https://www.icourse163.org/passport/logingate/mocMobChangeCookie.htm?token={token}&returnUrl=aHR0cHM6Ly93d3cuaWNvdXJzZTE2My5vcmcvaW5kZXguaHRt'	# returnUrl指MOOC網(wǎng)
session.get(vaildateUrl,headers = header)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論