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

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

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

1、基本原理

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

2、代碼實現(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()		# 拿到相應的json數(shù)據(jù)
codeUrl = resp['result']['codeUrl']				# 提取二維碼url及唯一標志key
pollKey = resp['result']['pollKey']
codejpg = session.get(codeUrl)				# 請求二維碼
with open('text.jpg','wb') as f:			# 下載二維碼
    f.write(codejpg.content)

2、模擬輪詢

利用已得的唯一標志key對服務器發(fā)起定時輪詢,獲得相應數(shù)據(jù)

通過分析,codeStatus的值為0是表示,等待掃碼;codeStatus的值為1是表示,已掃碼,等待確認登錄;codeStatus的值為2是表示,掃碼成功,此時服務器會返回token,這個對我們很有用

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請求資源

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

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

總結

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

相關文章

最新評論