模拟登陆web微信的流程和参数细节
这几天在用python写了一个模拟登陆web微信,发送和接受信息的程序。发现步骤不多,但需要的参数太多了
整个过程中,务必保证session、headers、cookie一致,不然的话,中间会出现登陆异常。
把流程和细节分享出来
第一步:登陆
1、get访问微信首页https://wx.qq.com
提供session、headers
用途:获取cookie
后续访问必须带session、headers、cookie这三个参数,并保持不变
2、get访问https://wx.qq.com/jslogin
get参数分别是
appid:值为自定义,格式为wx782c26e4c19acffb
fun:值为new
lang:值为en_us
redirect_uri:值为https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
_:值为当前时间戳
完整的URL例子https://wx2.qq.com/jslogin?redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&appid=wx782c26e4c19acffb&lang=en_US&_=1485065568&fun=new
用途:获取二维码uuid
3、get访问https://wx.qq.com/qrcode/{{uuid}}
例子:https://wx2.qq.com/qrcode/AfdK5U5qyw==
用途:下载和展示二维码
4、扫码和确认,访问https://wx.qq.com/cgi-bin/mmwebwx-bin/login,
get参数
loginicon:值必须为true
uuid:值为{{uuid}}
r:值为当前时间戳/1524
_:值为当前时间戳
完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=AacJ62nlRg==&tip=0&r=-974452&_=1485065779
用途:返回登陆状态,登陆成功之后的redirect_uri
返回状态码说明如下:
200,扫码和确认成功
201,扫码,未确认
其他,未扫码或者其他原因
第二步、初始化页面和获取登陆信息
1、get访问{{redirect_uri}}
完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=A0k1PKCiAX8_8nyisAG0R9d5@qrticket_0&uuid=AacJ62nlRg==&lang=en_US&scan=1485065793
用途:返回登陆认证等信息,一个字典类型的json格式,下文用login_info表示
2、post访问https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=【当前时间戳】
post参数为
BaseRequest:通过1返回参数获取值
例子:{"BaseRequest": {"DeviceID": "uKUD8e%2Bp7iXqNpbOuPTntL7OdbsfxEv5JdQjKtb7Mc%2FVQK2leE%2BRrNVkI5fQZZjB", "Sid": "xkQE8IoFPjwXEf2W", "Uin": "575635712", "Skey": "@crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324", "isgrayscale": "1"}}
用途:返回微信用户信息、第一页好友信息、和BaseRequest、最新聊天信息等等
第三步、获取好友信息
get访问https://wx.qq.com/webwxgetcontact
get参数
r:值为当前时间戳
seq:值为0
skey:值为login_info[Skey]
完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=1485065800&seq=0&skey=@crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324
用途:返回所有的好友信息,字典json格式
有用的好友信息字段说明:
Sex:1表示男,2表示女,0为其他【没有设置性别的好友、公众号、群、系统账号等等】
UserName,微信系统为每个微信号分配一个唯一号码,开头@@表示群、字母或者数字开头表示系统账号,其他【公众号、好友等】以单@开头
NickName,个人设置的昵称,重复可能性很大
Alias,微信号,如果没有设置为空,不会出现重复
第四步、接受和发送新信息
1、接受信息
1)、定时检查是否有新信息
get访问https://{{sync_url}}/synccheck
get参数是:
'r' : 当前时间戳*1000
'skey' : login_info[skey]
'sid' : login_info[sid]
'uin' : login_info[uin]
'deviceid' : login_info[deviceid]
'synckey' : login_info[synckey]
'_' : 当前时间戳*1000
完整的URL例子:https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin/synccheck?deviceid=e565817597249768&synckey=List_%5B%7B%27Key%27%3A+1%2C+%27Val%27%3A+645531166%7D%2C+%7B%27Key%27%3A+2%2C+%27Val%27%3A+645531276%7D%2C+%7B%27Key%27%3A+3%2C+%27Val%27%3A+645531125%7D%2C+%7B%27Key%27%3A+1000%2C+%27Val%27%3A+1485058018%7D%5D%7CCount_4&skey=%40crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324&sid=xkQE8IoFPjwXEf2W&r=1485065802608&_=1485065802608&uin=575635712
用途:返回最新信息数,0表示没有新消息
2)、获取新信息内容,post访问https://wx.qq.com/webwxsync?sid=login_info[sid]&skey=login_info[skey]&lang=en_US&pass_ticket=login_info[pass_ticket]
post参数为
'BaseRequest' : login_info[BaseRequest]
'SyncKey' : login_info[SyncKey]
'rr' :~当前时间戳*1000
例子:{"rr": -1485065809, "BaseRequest": {"Ret": 0, "ErrMsg": ""}, "SyncKey": {"List": [{"Key": 1, "Val": 645531166}, {"Key": 2, "Val": 645531278}, {"Key": 3, "Val": 645531125}, {"Key": 11, "Val": 645531260}, {"Key": 13, "Val": 645524153}, {"Key":
201, "Val": 1485065810}, {"Key": 203, "Val": 1485064747}, {"Key": 1000, "Val": 1485058018}, {"Key": 1001, "Val": 1485057992}, {"Key": 1002, "Val": 1485058221}, {"Key": 1004, "Val": 1484911834}], "Count": 11}}
完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=xkQE8IoFPjwXEf2W&skey=@crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324&lang=en_US&pass_ticket=uKUD8e%2Bp7iXqNpbOuPTntL7OdbsfxEv5JdQjKtb7Mc%2FVQK2leE%2BRrNVkI5fQZZjB
用途:返回最新信息列表
注意:群信息的发送者放在Content开头部分
2、发送信息
post访问https://wx.qq.com/webwxsendmsg
post参数
'BaseRequest': self.base_request,
'Msg': {
'Type': login_info[BaseRequest],
'Content': content,
'FromUserName': 自己的username,
'ToUserName': 发送的username,
'LocalID': int(time.time() * 1000 * 1000 * 10),
'ClientMsgId': int(time.time() * 1000 * 1000 * 10),
},
'Scene' : 0
返回发送结果json字典
有错误之处,请指教
模拟登陆web微信的流程和参数细节的更多相关文章
- 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程
[前提] 想要实现使用某种语言,比如Python,C#等,去实现模拟登陆网站的话,首先要做的事情就是使用某种工具,去分析本身使用浏览器去登陆网页的时候,其内部的执行过程,内部逻辑. 此登陆的逻辑过程, ...
- 【转】详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)
转自:http://www.crifan.com/files/doc/docbook/web_scrape_emulate_login/release/html/web_scrape_emulate_ ...
- 使用python模拟登陆百度
#!/usr/bin/python # -*- coding: utf- -*- """ Function: Used to demostrate how to use ...
- Python 爬虫五 进阶案例-web微信登陆与消息发送
首先回顾下网页微信登陆的一般流程 1.打开浏览器输入网址 2.使用手机微信扫码登陆 3.进入用户界面 1.打开浏览器输入网址 首先打开浏览器输入web微信网址,并进行监控: https://wx.qq ...
- PHP中CURL技术模拟登陆抓取网站信息,用与微信公众平台成绩查询
伴随微信的红火,微信公众平台成为许多开发者的下一个目标.笔者本身对于这种新鲜事物没有如此多的吸引力.但是最近有朋友帮忙开发微信公众平台中一个成绩查询的功能.于是便在空余时间研究了一番. 主要的实现步骤 ...
- 基于Flask 实现Web微信登陆
网页版微信登陆网址 https://login.wx.qq.com/ 获取微信登陆的二维码 在浏览器中访问登陆接口 https://login.wx.qq.com/ 我们查找二维码的图片可以看到 其中 ...
- Web微信模拟
一.概要 目的:实现一个具有web微信类似功能的项目 框架:Django 模块:render.HttpResponse.BeautifulSoup.re.time.requests.json.rand ...
- php 实现微信模拟登陆、获取用户列表及群发消息功能示例
本文实例讲述了php实现微信模拟登陆.获取用户列表及群发消息功能.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
- Python实现网站模拟登陆
一.实验简介 1.1 基本介绍 本实验中我们将通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方 ...
随机推荐
- IOS开发---菜鸟学习之路--(二十一)-利用正则表达式解析URL获取其中的参数
因为项目需要解析URL当中参数的部分,在网上搜索了一下都没有相关的资料. 然后就自己写了一个 其实我就是通过正则表达式来处理URL 进行解析的 好了直接上代码吧 也是非常的简单,大家拷贝过去就可以使用 ...
- mate viewport
<meta name="viewport" content="width=device-width,height=device-height,initial-sca ...
- Python 拓展之推导式
写在之前 推导式是从一个或多个迭代器快速简洁的创建数据结构的一种办法,它可以将循环和条件判断结合,从而可以避免语法冗长的代码. 列表推导式 我在之前的文章中(零基础学习 Python 之 for 循环 ...
- c++11特性使用
#include <list> #include <iostream> int main(){ list<int> lst; for(list<int> ...
- s debug
value stack contents ognl 值栈 stack context action上下文 action上下文是一个map对象,通过#key获得对象内容,在#re ...
- redis.clients.jedis.exceptions.JedisDataException: MISCONF Redis is configured to save RDB snapshots
最近在学习Redis ,在写test测试的时候碰到这个报错: redis.clients.jedis.exceptions.JedisDataException: MISCONF Redis is c ...
- linux服务器上设置多主机头,设置多web站点
假设VPS的IP是58.130.17.168,有两个域名指向该IP,分别是domain1.com, domain2.com, 修改/etc/httpd/conf/httpd.conf,在文件的最后加入 ...
- IIS8 不能在此路径中使用此配置节。如果在父级别上锁定了该节
问题: 不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny"),或者是通过包含 overr ...
- BZOJ 3462 DZY Loves Math II ——动态规划 组合数
好题. 首先发现$p$是互质的数. 然后我们要求$\sum_{i=1}^{k} pi*xi=n$的方案数. 然后由于$p$不相同,可以而$S$比较小,都是$S$的质因数 可以考虑围绕$S$进行动态规划 ...
- 嵌入式wifi iwconfig编译
转载自:http://blog.sina.com.cn/s/blog_546ced060101cmru.html 移植wifi无线网卡到mini2440上全过程 前段时间移植了U-boot和l ...