掘金登陆引起的思考

写在前面

近日看了几篇关于自动发布掘金文章的帖子。都是后端直接调用发布文章的接口配合定时任务完成的。可是缺点就是绕过了登陆掘金的步骤。经过手动获取页面的 cookie ,而后将 cookie 交给程序,完成自动发布的功能。因此今天就从技术的角度出发,一探掘金的登陆时如何实现的。前端

正文开始

首先声明这里只探讨技术实现。python

1. 问题提出的背景

在这次文章打卡的活动中,会存在写好文章存在草稿箱,可是忘了发布文章致使断更的状况发生。因而就突发奇想,可否有自动发布文章的功能,帮助咱们完成一部分自动化的工做,去解决漏发布的问题。程序员

因而就从文章发布的接口入手,咱们先看掘金文章发布的逻辑;后端

  • a. 文章新建后都会存入草稿,而且生成惟一的ID。
  • b. 文章编辑不发布依旧是在草稿箱,文章ID不变。
  • c. 文章发布时填写必要的标签后,便可发布成功。
  • d. 文章发布完成,经过审核即会变成可读状态,便可分享于他人。

下面是发布接口具体的参数以及地址: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

2. 登陆方式

目的:已知用户名密码的状况实现自动登陆。cookie

  • 手机验证码登陆

image.png

  • 帐号密码登陆

image.png

手机验证码登陆因为每次都须要动态的获取验证码,因此这里就不考虑;第三方登陆本质上也是须要登陆其余帐号,这里也不考虑;因此咱们只须要查看 掘金帐号密码登陆便可;那么咱们就研究一下这个东西。post

在正常输入用户名密码后会出现滑动验证码,须要手动验证才能经过。加密

image.png

彷佛问题到这里陷入了死胡同。个人目的是为了自动登陆,可是查看了几种方式后绕不开人为的介入。

3. 深刻探究

通过思考登陆的本质是一个 POST 请求的过程也就是发送请求就能够完成。因此继续沿着这个思路继续查看登陆的接口,下图为登陆时具体的接口。

image.png

如图请求的接口与请求的参数都有,可是参数明显是加密处理事后的数据。

这里继续深刻了解后得知大体的登陆流程,这里没有作深刻了解只是根据本身的经验总结的结果。

  • 滑动验证过程

image.png

  • 登陆过程,此过程用户名&密码加密

因此要想经过脚本的方式登陆成功就须要完成两件事:

  1. 滑动验证码请求参数的构造
  2. 登陆接口请求参数构造

可是努力查询掘金前端的代码,虽然说能找到一些蛛丝马迹。可是终究是被前端代码的量以及动态加载的 JS 搞怕了,花出的时间可能与收获不成正比。卒,享年28岁。

PS:这里提供的破解思路是可行的,但愿有能力的小伙伴研究出来以后,能够一块儿探讨。

总结

掘金的登陆两个比较重要的功能:

  • 经过滑动验证码肯定操做者身份为真实用户。
  • 经过前端加密后端解密的方式避免登陆过程当中明文传输用户信息。

二者结合就实现了比较安全的登陆方式,使得大部分程序员想经过程序直接登陆掘金的梦想直接破灭。

因此想实现自动发布的功能,须要另辟蹊径才能达到目的。

相关文章
相关标签/搜索