建了个人工具类的微信公众账号,想主动推动微信消息给自己的账号,可是微信没有提供公开的api,只能通过模拟登陆网页版的公众平台结合sae平台来对用户进行消息的推送。

废话不多说。下面是模拟登陆的思路和代码。我自己也是个初学真,做个记录,也希望能帮助到别人。

微信公众平台网址 https://mp.weixin.qq.com

以下操作使用使用chrome示范:

打开微信公众平台,输入账号密码,用F12键打开开发者工具,打开Network标签,点击preserve log upon navigation 使其变为红色按钮 ,不然跳转之后请求记录会被清除。

点击登录按钮,成功进入公众账号管理平台后可以找到login?lang=zh_cn请求。打击打开:

可以看到请求头和post 的数据,把各个请求头逐个加入请求头内里,密码应该是md5加密过的,可以直接复制post里加密后的密码到代码里。该请求返回的是json数据,使用json库处理。

正确返回的数据如下:

{

"Ret": 302,

"ErrMsg": "/cgi-bin/home?t=home/index&lang=zh_CN&token=xxxxxxxx",

"ShowVerifyCode": 0,

"ErrCode": 0

}

返回的token很重要,而且每次返回的token可能不一样。要在代码里设置变量保存。此外还要主要处理cookie,以下为登陆的代码:

#-*- coding:utf-8 -*-

import urllib

import urllib2

import cookielib

import json

cj=cookielib.LWPCookieJar()

opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

urllib2.install_opener(opener)

#登陆

paras={'username':'xxxxxx@163.com','pwd':'xxxxxxxxxxxxxxxxxxxx','imgcode':'','f':'json'}

req=urllib2.Request('https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN',urllib.urlencode(paras))

req.add_header('Accept','application/json, text/javascript, */*; q=0.01')

req.add_header('Accept-Encoding','gzip,deflate,sdch')

req.add_header('Accept-Language','zh-CN,zh;q=0.8')

req.add_header('Connection','keep-alive')

req.add_header('Content-Length','79')

req.add_header('Content-Type','application/x-www-form-urlencoded; charset=UTF-8')

req.add_header('Host','mp.weixin.qq.com')

req.add_header('Origin','https://mp.weixin.qq.com')

req.add_header('Referer','https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN')

req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36')

req.add_header('X-Requested-With','XMLHttpRequest')

ret=urllib2.urlopen(req)

retread=ret.read()

print retread

token=json.loads(retread)

#print token['ErrMsg'][44:]

token=token['ErrMsg'][44:]

print token

接下就可以推送消息了。

进入用户管理,点击你要发送消息的用户,使用同样办法,找到请求 singlesend?t=ajax-response&lang=zh_CN ,得到请求头和post的数据。

推送消息的代码如下:

paras2={'type':'1','content':'xxxxx','error':'false','imgcode':'','tofakeid':'xxxx','token':token,'ajax':'1'}# content为你推送的信息,tofakeid为用户的唯一标示id,可在html代码里找到

req2=urllib2.Request('https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN',urllib.urlencode(paras2))

req2.add_header('Accept','*/*')

req2.add_header('Accept-Encoding','gzip,deflate,sdch')

req2.add_header('Accept-Language','zh-CN,zh;q=0.8')

req2.add_header('Connection','keep-alive')

#req2.add_header('Content-Length','77') 此行代码处理发送数据长度的确认,不要加。是个坑。

req2.add_header('Content-Type','application/x-www-form-urlencoded; charset=UTF-8')

req2.add_header('Host','mp.weixin.qq.com')

req2.add_header('Origin','https://mp.weixin.qq.com')

req2.add_header('Referer','https://mp.weixin.qq.com/cgi-bin/singlemsgpage?msgid=&source=&count=20&t=wxm-singlechat&fromfakeid=150890&token=%s&lang=zh_CN'%token)

req2.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36')

req2.add_header('X-Requested-With','XMLHttpRequest')

#不加cookie也可发送

#req2.add_header('Cookie',cookie2)

ret2=urllib2.urlopen(req2)

#ret2=opener.open(req2)

print 'x',ret2.read()

That's all. 复制代码请注意缩进问题。

python模拟微信登录公众号_PYTHON 微信公众平台模拟登陆相关推荐

  1. python登录并关注公众号_python微信公众号之关注公众号自动回复

    我们知道一旦使用开发者模式,我们就无法使用公众号平台中的自动回复功能,也就是关注自动回复功能只有自己写才可以. 如图所示,我们无法直接使用此功能. 那么接着上一个博客,我们完成了关键词自动回复功能,博 ...

  2. python爬取微信公众号_Python爬取微信公众号(中间人代理法)

    1.环境:ubuntu16.04 + redis + mysql + python3.5 + anyproxy + android + pm2 + npm + node 一台爬虫服,python3环境 ...

  3. python爬取微信公众号_python使用webdriver爬取微信公众号

    本文实例为大家分享了python使用webdriver爬取微信公众号的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- from selenium import we ...

  4. python 微信公众号,微信小程序wechatpy的使用

    第一章 Python 微信公众号,小程序入门之wechatpy的使用 文章目录 第一章 Python 微信公众号,小程序入门之wechatpy的使用 前言 一.wechatpy是什么? 二.微信公众号 ...

  5. 微信公众号python_wechat: 微信 Python SDK,支持微信公众号以及企业号的上行消息及 OAuth 接口...

    微信公众号Python-SDK 本SDK支持微信公众号以及企业号的上行消息及OAuth接口.本文档及SDK假设使用者已经具备微信公众号开发的基础知识,及有能力通过微信公众号.企业号的文档来查找相关的接 ...

  6. 实现支持多公众号的微信公众号扫码登录服务

    实现支持多公众号的微信公众号扫码登录服务 最近,在公司的通行证项目开发过程中,需求方提出了支持微信公众号扫码登录,并且可以支持多公众号接入的需求.研究了一下微信公众号的开发文档,实现微信公众号扫码登录 ...

  7. 无需公众号PHP微信登录微信授权微信第三方登录微信开发php开发

    无论是个人还是公司,无需申请公众号,无需申请微信开放平台,即可实现手机网站和PC网站的微 信登录!!! 正常的微信登录是这样的: 1.手机版网站做微信登录,需要申请一个认证公众号,认证不仅需要公司营 ...

  8. 淘宝客CMS,微信公众号,微信淘客机器人

    淘宝客CMS,微信公众号,微信淘客机器人一站式淘客导购解决方案 先来写个序 楼主程序员,两耳不闻窗外事,一心只知敲代码,2019年前没接触过淘客,也不懂淘客是什么? 后来有个朋友给我提到,说他在做淘客 ...

  9. 公众号生成微信渠道二维码的方法?

    2019独角兽企业重金招聘Python工程师标准>>> 微信公众号有一个默认的二维码,不同渠道投放的都是同一个二维码信息,那么无法知道用户是从哪个渠道关注的.所以现在需要渠道二维码, ...

  10. php微信公众号报警,微信报警函数定义与用法汇总

    概要说明微信公众平台已对外开放接口报警,当微信服务器向开发者推送消息失败次数达到预定阈值时,会将报警消息发送到指定微信报警群中(设置方式:公众平台->开发者中心->接口报警),请开发者积极 ...

最新文章

  1. this keyword details
  2. 正则表达式:(mysql)REGEXP
  3. rs232读取智能电表_【技术文章】蜂窝物联网PoC为智能电表连接指引路向
  4. java executor_Java并发编程(08):Executor线程池框架
  5. 思考:日期类型的数据应该用什么样的具体形式存储到数据库?
  6. Linux防火墙开关命令
  7. SetWindowLong代码设置窗体borderStyle风格 TOOLWINDOW
  8. DataReader与DataAdapter的区别
  9. GAE-BBS v.10 开源下载
  10. Linux Kernel中irq handler, softirq handler 和 tasklet
  11. 2019版PHP自动发卡平台源码
  12. 创业公司如何实施股权激励
  13. 这下爽了,居然有人通过这个把Linux的命令提示符给整明白了
  14. python码合并txt文件
  15. 《生物信息学:导论与方法》--本体论、分子通路鉴定--听课笔记(十八)
  16. 聚美优品根据关键词取商品列表 API
  17. 斯特林数 java实现_斯特林数 - BILL666 - 博客园
  18. 全国大学生软件测试大赛指南
  19. UnityHLSLShader 函数笔记
  20. Linux下通过Shell脚本快速进入指定目录

热门文章

  1. 牛客网算法之洗牌详解
  2. 百度“哼唱”音乐搜索
  3. highcharts在Vue项目中使用去水印方法
  4. mac分区后数据丢失怎么恢复?
  5. ## Asset Store(unity商店) 如何下载已购买的资源?*
  6. CNN结构:色彩特征提取-从RGB空间到HSV空间(色彩冷暖判断)
  7. 关于msp430系列单片机的一些入门心得(新手向)
  8. MySQL中的蠕虫复制
  9. 一次Linux遭入侵,挖矿进程被隐藏案例分析
  10. [渝粤教育] 南京森林警察学院 森林植物识别技术 ——珍稀植物识别 参考 资料