近日看了几篇关于自动发布掘金文章的帖子。都是后端直接调用发布文章的接口配合定时任务完成的。可是缺点就是绕过了登陆掘金的步骤。经过手动获取页面的 cookie ,而后将 cookie 交给程序,完成自动发布的功能。因此今天就从技术的角度出发,一探掘金的登陆时如何实现的。前端
首先声明这里只探讨技术实现。python
在这次文章打卡的活动中,会存在写好文章存在草稿箱,可是忘了发布文章致使断更的状况发生。因而就突发奇想,可否有自动发布文章的功能,帮助咱们完成一部分自动化的工做,去解决漏发布的问题。程序员
因而就从文章发布的接口入手,咱们先看掘金文章发布的逻辑;后端
下面是发布接口具体的参数以及地址:api
参数 | 类型 | 说明 |
---|---|---|
draft_id | 字符串 | 文章ID |
sync_to_org | 布尔 | 是否同步 |
column_ids | 列表 | 未知 |
对于 python 处理这种事情很简单,相似这样:安全
# 代码为演示代码
body = {
"draft_id": "123456",
"sync_to_org": False,
"column_ids": []
}
requests.post(self.publish_url, body=body)
复制代码
很明显这么作是行不通的。由于在代码中是没有体现出任何登陆的操做。下面就看一下掘金的登陆实现。markdown
目的:已知用户名密码的状况实现自动登陆。cookie
手机验证码登陆因为每次都须要动态的获取验证码,因此这里就不考虑;第三方登陆本质上也是须要登陆其余帐号,这里也不考虑;因此咱们只须要查看 掘金帐号密码登陆便可;那么咱们就研究一下这个东西。post
在正常输入用户名密码后会出现滑动验证码,须要手动验证才能经过。加密
彷佛问题到这里陷入了死胡同。个人目的是为了自动登陆,可是查看了几种方式后绕不开人为的介入。
通过思考登陆的本质是一个 POST 请求的过程也就是发送请求就能够完成。因此继续沿着这个思路继续查看登陆的接口,下图为登陆时具体的接口。
如图请求的接口与请求的参数都有,可是参数明显是加密处理事后的数据。
这里继续深刻了解后得知大体的登陆流程,这里没有作深刻了解只是根据本身的经验总结的结果。
因此要想经过脚本的方式登陆成功就须要完成两件事:
可是努力查询掘金前端的代码,虽然说能找到一些蛛丝马迹。可是终究是被前端代码的量以及动态加载的 JS 搞怕了,花出的时间可能与收获不成正比。卒,享年28岁。
PS:这里提供的破解思路是可行的,但愿有能力的小伙伴研究出来以后,能够一块儿探讨。
掘金的登陆两个比较重要的功能:
二者结合就实现了比较安全的登陆方式,使得大部分程序员想经过程序直接登陆掘金的梦想直接破灭。
因此想实现自动发布的功能,须要另辟蹊径才能达到目的。