抓包分析
首先打开charles,记录从打开浏览器到新浪微博登陆成功的全部http请求
打开新浪微博,等待页面加载完成后,输入账号密码点击登陆,charles停止抓包,关闭浏览器。并将抓包结果进行保存。
找到登陆的POST请求
登陆POST请求
理论上我们只需要能完整的提交这个表单就能实现新浪微博的登陆。但是如果进行试验的话,会发现将该表单完整复制之后使用requests进行post提交是无法登陆的,所以可以断定其中某些字段是通过动态获取。
由于新浪微博的首页内容太多太杂
我们将上文中拿到的登陆post请求进行访问发现是一个单独的登陆页面。
登陆页面
打开F12,对登陆按钮进行定位,根据前后台交互的方式可以知道后台应该是通过中某一个内容判断用户点击了登陆按钮,在中的检索的:submit。
按钮定位
js代码查找登陆操作
初步断定该js中进行了一些加密操作
username转换
根据命名规则尝试检索用户名很容易的找到了一段username的转换操作
从可以看出来,用户名经过了url编码后再进行了base64转码,从键值对可以看出来提交的就是转码后的账号
使用python实现
password转换
下面检索一下子就发现了关键的一句话,而且明目张胆的写着RSA
要进行RSA加密需要公钥,检索一下找到了公钥这样还不够,再找找看是什么东西所以应是返回值中有带咯,在charles里面找一下
公钥
这个返回值中有很多眼熟的东西servertime,nonce都在这里面了。记下这个有用的url:
这个url有点复杂,看到了,等内容使用requests里面get的传入
根据用python写一下rsa加密
文章开头的表单的动态内容都动态获取了接下来就是post表单提交了,然后拿一下user_uniqueid和user_nick就可以(用你的账户)爬必须登录才能获取的数据了
登录结果
完整代码来自:https://github.com/xianhu/LearnPython/blob/master/python_wechat.py
领取专属 10元无门槛券
私享最新 技术干货