文章所使用Python版本为py3.5

1.微信服务器返回一个会话ID

微信Web版本不使用用户名和密码直接登录,而是采用二维码登录,所以服务器需要首先分配一个唯一的会话ID,用来标识当前的一次登录。

通过查看网络请求我们找到了这个 二维码图片代表的随机字符串,(IcelandB9Entig==),

【Python之路】特别篇--微信Web网页版通信的全过程分析

2.通过会话ID获得二维码

然后找到该随机字符串的来源请求

【Python之路】特别篇--微信Web网页版通信的全过程分析

请求方式为 GET形式 , 具体连接为:

https://login.wx.qq.com/jslogin?
appid=wx782c26e4c19acffb
&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage
&fun=new&lang=zh_CN
&_=1492591577859

我们只需要改变最后一个变量 _值即可获得新的字符串序列: (这个值是当前距离林威治标准时间的毫秒)可以自行构造!

通过分割,我们就可以获得随机字符串,自己在前端页面上构造一个二维码出来.

import tornado.ioloop
import tornado.web
import requests
import time
import re
import json
import urllib.request,urllib.parse
import random

WECHAT_SESSION_ID = None
WECHAT_TIMESPAN = None

SESSION_ID_URL = 'https://login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_={0}'

class HomeHandler(tornado.web.RequestHandler):
    def get(self):
        print('\n--------------------')
        global WECHAT_SESSION_ID
        global WECHAT_TIMESPAN

        WECHAT_TIMESPAN = str(time.time())
        sesssion_url = SESSION_ID_URL.format(WECHAT_TIMESPAN)
        response = requests.get(sesssion_url)
        # 获取验证码,随机字段
        WECHAT_SESSION_ID = re.split('=', response.text, 2)[-1].strip().replace('"', '').replace(';', '')
        print('Session_id : ',WECHAT_SESSION_ID)
        self.render('index.html',session_id = WECHAT_SESSION_ID)
HomeHandle

相关文章:

  • 2022-12-23
  • 2021-08-27
  • 2022-12-23
  • 2021-09-29
  • 2022-02-07
  • 2021-12-11
  • 2021-06-18
  • 2021-06-16
猜你喜欢
  • 2021-10-17
  • 2022-02-08
  • 2021-12-21
  • 2021-10-04
  • 2021-12-25
  • 2021-11-22
相关资源
相似解决方案