现在虽然有了cookies,但还是不能畅通无助,需要解决token,和g_tk;
注意点:主页的编码有两种:utf-8,gbk 需要解码时"ignore",忽略部分解不了的源码
token 验证
- token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。
- 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
- 客户端使用用户名跟密码请求登录
- 服务端收到请求,去验证用户名与密码
- 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
- 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
- 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
- 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
def get_tocken(cookies):
url = index_url
headers = {
"cookie": cookies,
'referer':"https://i.qq.com/",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",
}
# 这里注意混合编码,网页中charset有两种,utf-8,gbk
res = requests.get(url,headers=headers)
contents = res.content
# encode = chardet.detect(contents) # 获取网页编码格式字典信息,字典encode中键encoding的值为编码格式
html = contents.decode('gbk','ignore') # 用分析出的网页编码格式,解码
try:
pattern = re.compile(r'{ try{return\s?"(.*?)";}')
token = re.findall(pattern,html)[0]
except IndexError:
token=''
return token