标签:扫码 qr 快手 self 登陆 https com id kuaishou
快手扫码登陆
1.二维码生成接口:
https://id.kuaishou.com/rest/c/infra/ks/qr/start
响应值imageData为base64编码的二维码图片
2.检测过期状态
https://id.kuaishou.com/rest/c/infra/ks/qr/scanResult
3.效验Login
https://id.kuaishou.com/rest/c/infra/ks/qr/acceptResult
4.回调登陆接口:
https://id.kuaishou.com/pass/kuaishou/login/qr/callback
5.上代码:
# -*- coding: utf-8 -*-
# @Author : Codeooo
# @Time : 2021/11/15
import base64
import requests
from requests import RequestException
class KsLogin:
session = requests.Session()
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/80.0',
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Referer': 'https://www.kuaishou.com/',
'Content-type': 'application/x-www-form-urlencoded',
'Origin': 'https://www.kuaishou.com',
'Connection': 'keep-alive',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
}
def postRequests(self, url: str, data) -> str:
for _ in range(5):
try:
res = self.session.post(
url=url,
headers=self.headers,
data=data,
proxies=self.proxies,
timeout=5
)
except RequestException:
# self.proxies = rodmoProxy()
# TODO 请求抛错未处理
pass
# time.sleep(random.randint(1, 3))
else:
return res.json()
def authToken(self, token):
authTokenUrl = f'https://www.kuaishou.com/rest/infra/sts?authToken={token}&sid=kuaishou.server.web'
print("=====authTokenUrl=====:", authTokenUrl)
for _ in range(5):
try:
res = self.session.get(
url=authTokenUrl,
headers=self.headers,
proxies=self.proxies,
timeout=5
)
except RequestException:
pass
# self.proxies = rodmoProxy()
# TODO 请求抛错未处理
# time.sleep(random.randint(1, 3))
else:
print(res.cookies.get_dict())
html = res.json()
return html
return
def main(self):
"""proxy测试"""
# self.proxies = rodmoProxy()
self.proxies = None
# 二维码
qrCode = self.postRequests('https://id.kuaishou.com/rest/c/infra/ks/qr/start', {"sid": 'kuaishou.server.web'})
print("=====生成二维码=====:",qrCode)
qrLoginToken = qrCode.get("qrLoginToken")
qrLoginSignature = qrCode.get("qrLoginSignature")
with open('qrCode.jpg', 'wb') as file:
file.write(base64.b64decode(qrCode.get("imageData")))
input("请扫码二维码:Y/N")
data_accept = {
'qrLoginToken': qrLoginToken,
'qrLoginSignature': qrLoginSignature,
'sid': 'kuaishou.server.web'
}
# 效验Login
acceptResult = self.postRequests('https://id.kuaishou.com/rest/c/infra/ks/qr/acceptResult', data_accept)
qrToken = acceptResult.get("qrToken")
# # 检测过期状态
# scanResult = self.postRequests('https://id.kuaishou.com/rest/c/infra/ks/qr/scanResult', data_accept)
# print("=====检测过期状态=====:",scanResult)
at_data = {
'qrToken': qrToken,
'sid': 'kuaishou.server.web'
}
#登陆接口
result = self.postRequests('https://id.kuaishou.com/pass/kuaishou/login/qr/callback', at_data)
print(result)
if __name__ == '__main__':
"""主逻辑"""
spider = KsLogin()
try:
spider.main()
except TimeoutError:
# todo 未处理
raise ValueError
标签:扫码,qr,快手,self,登陆,https,com,id,kuaishou 来源: https://blog.csdn.net/weixin_38927522/article/details/121362949
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。