python-QQ空间扫码登录

python-QQ空间扫码登录源码

#-*- coding = utf-8 -*-
#Time : 2021/1/20 
#Author : 小柠檬
#File : QQ空间扫码登录模板.py
import requests
from PIL import Image
import time
import re

def bkn(pSkey):
    #计算bkn
    t,n,o = 5381,0,len(pSkey)

    while n < o:
        t += (t << 5) + ord(pSkey[n])
        n += 1

    return t & 2147483647

def ptqrToken(qrsig):
    #计算ptqrtoken
    n,i,e = len(qrsig),0,0

    while n > i:
        e += (e << 5) + ord(qrsig[i])
        i += 1

    return 2147483647 & e

def QR():
    #获取 qq空间 二维码
    url = 'https://ssl.ptlogin2.qq.com/ptqrshow?appid=549000912&e=2&l=M&s=3&d=72&v=4&t=0.8692955245720428&daid=5&pt_3rd_aid=0'

    try:
        r = requests.get(url)
        qrsig = requests.utils.dict_from_cookiejar(r.cookies).get('qrsig')

        with open(r'C:\Users\Administrator\Desktop\QR.png', 'wb') as f:
            f.write(r.content)

        im = Image.open(r'C:\Users\Administrator\Desktop\QR.png')
        im = im.resize((350, 350))
        print(time.strftime('%H:%M:%S'),'登录二维码获取成功')
        im.show()

        return qrsig

    except Exception as e:
        print(e)

def cookie():
    #获取 QQ空间 cookie
    qrsig = QR()
    ptqrtoken = ptqrToken(qrsig)

    while True:
        url = 'https://ssl.ptlogin2.qq.com/ptqrlogin?u1=https%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&ptqrtoken=' + str(ptqrtoken) + '&ptredirect=0&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-0-' + str(time.time()) + '&js_ver=20032614&js_type=1&login_sig=&pt_uistyle=40&aid=549000912&daid=5&'
        cookies = {'qrsig': qrsig}

        try:
            r = requests.get(url, cookies=cookies)

            if '二维码未失效' in r.text:
                print(time.strftime('%H:%M:%S'),'二维码未失效')

            elif '二维码认证中' in r.text:
                print(time.strftime('%H:%M:%S'),'二维码认证中')

            elif '二维码已失效' in r.text:
                print(time.strftime('%H:%M:%S'),'二维码已失效')

            else:
                print(time.strftime('%H:%M:%S'), '登录成功')

                cookies = requests.utils.dict_from_cookiejar(r.cookies)
                uin = requests.utils.dict_from_cookiejar(r.cookies).get('uin')
                regex = re.compile(r'ptsigx=(.*?)&')
                sigx = re.findall(regex, r.text)[0]
                url = 'https://ptlogin2.qzone.qq.com/check_sig?pttype=1&uin=' + uin + '&service=ptqrlogin&nodirect=0&ptsigx=' + sigx + '&s_url=https%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&f_url=&ptlang=2052&ptredirect=100&aid=549000912&daid=5&j_later=0&low_login_hour=0&regmaster=0&pt_login_type=3&pt_aid=0&pt_aaid=16&pt_light=0&pt_3rd_aid=0'

                try:
                    r = requests.get(url, cookies=cookies, allow_redirects=False)
                    targetCookies = requests.utils.dict_from_cookiejar(r.cookies)
                    pSkey = requests.utils.dict_from_cookiejar(r.cookies).get('p_skey')
                    break

                except Exception as e:
                    print(e)

        except Exception as e:
            print(e)

        time.sleep(3)

    return targetCookies

def test():
    url = 'https://act.iwan.qq.com/trpc.iwan.mission_system_server.MissionSystemSvr/dealSimpleMission?missionId=mZZrWSzG7&gameId=26080&sPlat=0&sArea=2&serverId=&sRoleId=1&platformId=9&platformid=9&guid=53383d1eb5b611e89d19a042d48ad00a&device=453C45EA-B7B4-40C8-AE8C-F823796AF191&token=1324739766&acctype=qq'
    cookies = cookie()
    r = requests.get(url,cookies=cookies)
    print(r.text)

if __name__ == '__main__':
    test()
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
当使用QQ扫码登录时,通常需要使用QQ提供的开放平台API来实现。以下是一个使用Python编写的示例代码,用于实现QQ扫码登录功能: ```python import requests # 获取授权码 def get_auth_code(): # 替换为你的AppID和回调地址 app_id = 'your_app_id' redirect_uri = 'your_redirect_uri' # 构造请求URL url = f'https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id={app_id}&redirect_uri={redirect_uri}' # 发送GET请求获取授权码 response = requests.get(url) # 解析返回的URL,提取授权码 auth_code = response.url.split('=')[1] return auth_code # 获取访问令牌 def get_access_token(auth_code): # 替换为你的AppID、AppKey和回调地址 app_id = 'your_app_id' app_key = 'your_app_key' redirect_uri = 'your_redirect_uri' # 构造请求URL url = f'https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id={app_id}&client_secret={app_key}&code={auth_code}&redirect_uri={redirect_uri}' # 发送GET请求获取访问令牌 response = requests.get(url) # 解析返回的URL,提取访问令牌 access_token = response.text.split('&')[0].split('=')[1] return access_token # 获取用户信息 def get_user_info(access_token): # 构造请求URL url = f'https://graph.qq.com/oauth2.0/me?access_token={access_token}' # 发送GET请求获取用户OpenID response = requests.get(url) # 解析返回的JSON数据,提取OpenID openid = response.text.split('"')[3] # 构造请求URL url = f'https://graph.qq.com/user/get_user_info?access_token={access_token}&oauth_consumer_key={app_id}&openid={openid}' # 发送GET请求获取用户信息 response = requests.get(url) # 解析返回的JSON数据,提取用户信息 user_info = response.json() return user_info # 示例代码的使用 auth_code = get_auth_code() access_token = get_access_token(auth_code) user_info = get_user_info(access_token) print(user_info) ``` 请注意,上述代码中的`your_app_id`、`your_app_key`和`your_redirect_uri`需要替换为你在QQ开放平台申请的实际值。此外,你还需要安装`requests`库来发送HTTP请求。 希望以上代码能够帮助到你!如果你有任何其他问题,请随时提问。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值