首页 » 网站推广 » phpajaxlogin技巧_Python 模拟微博登录亲测有效

phpajaxlogin技巧_Python 模拟微博登录亲测有效

duote123 2024-12-04 0

扫一扫用手机浏览

文章目录 [+]

本日想做一个微博爬个人页面的工具,知足一些不可告人的秘密。
那么首先就要做那件必做之事!
仿照上岸……

代码是参考了:https://www.douban.com/note/201767245/,我对代码进行了优化,重构成了Python 3.6 版本,并且加入了大量注释方便大家学习。

phpajaxlogin技巧_Python 模拟微博登录亲测有效

PC 登录新浪微博时, 在客户端用JS预先对用户名、密码都进行了加密,而且在POST之前会GET 一组参数,这也将作为POST_DATA 的一部分。
这样,就不能用常日的那种大略方法来仿照POST 登录( 比如大家网 )。

phpajaxlogin技巧_Python 模拟微博登录亲测有效
(图片来自网络侵删)

在提交POST要求之前,须要GET 获取两个参数。
地址是:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)。

得到的数据中有 servertime 和 nonce 的值, 是随机的,其他值貌似没什么用。

def get_servertime(): url = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939' # 返回出来的是一个Response工具,无法直接获取,text后,可以通过正则匹配到 # 大概长这样子的:sinaSSOController.preloginCallBack({\"大众retcode\"大众:0,\"大众servertime\"大众:1545606770, ...}) data = requests.request('GET', url).text p = re.compile('\((.)\)') try: json_data = p.search(data).group(1) data = json.loads(json_data) servertime = str(data['servertime']) nonce = data['nonce'] return servertime, nonce except: print('获取 severtime 失落败!') return None

通过 httpfox 不雅观察 POST 的数据,参数较繁芜,个中“su\"大众 是加密后的username, sp 是加密后的password,servertime 和 nonce 是上一步得到的,其他参数是不变的。

username 经由了 BASE64 打算:

username = base64.encodestring( urllib.quote(username) )[:-1]

password 经由了三次SHA1 加密,且个中加入了 servertime 和 nonce 的值来滋扰。
即:两次SHA1加密后,将结果加上 servertime 和 nonce 的值,再SHA1 算一次。

def get_pwd(pwd, servertime, nonce): # 第一次打算,把稳Python3 的加密须要encode,利用bytes pwd1 = hashlib.sha1(pwd.encode()).hexdigest() # 利用pwd1的结果在打算第二次 pwd2 = hashlib.sha1(pwd1.encode()).hexdigest() # 利用第二次的结果再加上之前打算好的servertime和nonce值,hash一次 pwd3_ = pwd2 + servertime + nonce pwd3 = hashlib.sha1(pwd3_.encode()).hexdigest() return pwd3def get_user(username): # 将@符号转换成url中能够识别的字符 _username = urllib.request.quote(username) # Python3中的base64打算也是要字节 # base64出来后,末了有一个换行符,以是用了切片去了末了一个字符 username = base64.encodebytes(_username.encode())[:-1] return username

将参数组织好,POST要求。
这之后还没有登录成功,POST后得到的内容中包含一句:

location.replace(\"大众http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4%ED%CE%F3\"大众)

这是登录失落败时的结果,登录成功后结果与之类似,不过 retcode 的值是0。
接下来再要求这个URL,这样就成功登录到微博了。
记得要提前build 缓存。

作者简介:上海小胖,四大咨询的Tech Lead,MongoDB Professional得到者。
「Python专栏」专注Python领域的各种技能:爬虫、DevOps、人工智能、Web开拓等。
还有「大航海操持」,各种内推活动。

声明:本文为作者投稿,版权归其个人所有。

相关文章

介绍直播新纪元,轻松进入直播的五大步骤

随着互联网技术的飞速发展,直播行业在我国逐渐崛起,越来越多的人选择通过直播这一新兴媒介展示自己、分享生活、传递价值。对于许多新手来...

网站推广 2025-01-03 阅读1 评论0

介绍相机美颜原理,科技与美学的完美结合

随着科技的发展,智能手机的摄像头功能日益强大,美颜相机成为了许多人拍照的首选。美颜相机不仅满足了人们对于美的追求,更在视觉上给人带...

网站推广 2025-01-03 阅读1 评论0

介绍磁铁的制造,科学与艺术的完美结合

磁铁,一种神秘的物质,自古以来就吸引了无数人的目光。它不仅具有独特的磁性,还能在工业、医疗、科研等领域发挥重要作用。磁铁是如何制造...

网站推广 2025-01-03 阅读1 评论0

介绍电瓶激活方法,让电池焕发新生

随着科技的不断发展,电动汽车逐渐成为人们出行的首选。而电瓶作为电动汽车的核心部件,其性能直接影响着车辆的续航里程和行驶体验。新购买...

网站推广 2025-01-03 阅读1 评论0