登录网址:https://passport.csdn.net/account/login?ref=toolbar 项目源码:https://github.com/geekfly2016/Spider 代码目录:Spider/src/xyz/geekfly/csdn/Login.java
当我们对某些网站进行一些特定操作时,如知乎的点赞,会要求我们登录,这时候一些简单的做法就是粘贴浏览器请求中的Cookie信息,但作为自动化的程序来讲,这个方法明显不可行。因此就有了模拟登录的需求。 注:至于Cookie是什么,在网页请求时有什么用,不在本文讨论范围,自行Google吧。
模拟登录一般分为以下几步:
以CSDN登录为例,详细介绍每一步如何操作和代码实现: 1. 获取登录的所需的信息 打开CSDN,点击登录,即可看到登录页面,打开开发者工具。
注意先清空列表,勾选Preserve log(保持日志),这样点击登录跳转之后才能记录之前的请求。
输入自己的账号密码,点击登录,在第一个请求中我们可以看到登录请求所携带的参数,包括我们输入的用户名(username)和密码(password),但是发现还有几个其它参数。
再次退出,点击登录,查看表单发现存在这几个参数,因此模拟登录前需要获取这些参数。
方案是模拟登录前,先访问https://passport.csdn.net/account/login?ref=toolbar登录页面,使用Jsoup获取三个隐藏参数和表单提交的action(即为模拟登录的Url),保存以供下一步使用。 代码如下:
获取到的数据样例:
对于有些网站在分析之后,登录仅需要模拟点击登录所请求的Url带上用户信息即可,没有需要从登录页面获取参数的网站,不需要访问登录页面,只要找到模拟登录的Url即可。
2. 模拟提交账号信息,获取Cookie 在上一步点击登录后,可以在Response Headers中发现后台返回了很多参数,而在之后请求中,主要用到的也就是Cookie了,因此需要提取Cookie,而返回的又有很多个,需要自行拼接。
代码如下:
3. 携带Cookie进行目标操作 在后续请求中,携带Cookie即可。
主函数调度代码:
运行演示:
我们可以看到携带Cookie后,访问个人主页菜单栏包括了管理博客和写新文章,未携带Cookie则不包括,说明模拟登陆成功。
后记:这里使用的是最简单的模拟登录案例了,稍复杂点的还有带验证码的,登录信息中跳转N次验证的,还有微信网页版那样的扫码验证的,骚年们,任重而道远,继续努力吧。
接下来这个专题写什么呢?