模拟登陆CSDN——就是这么简单
工具介绍
本篇文章主要是讲解如何模拟登陆CSDN,使用的工具是HttpClient+Jsoup
其中HttpClient主要是负责发送请求,而Jsoup主要是解析HTML
你可能对HttpClient的API不太了解,不过没关系,往下看就好了~
Jsoup的语法类似jQuery的选择器,相信有一定web基础的人都可以很快的掌握
其中select(String selector)就是最强大的选择器,另外还提供一系列的细化的方法,比如:
getElementById(String id), getElementsByClass(String class), getElementsByTag(String tagName)
是不是很亲切?对~这个就跟JavaScript的方法类似了~
所以Jsoup对于开发WEB的朋友的学习成本是相当的低的!那么,继续吧骚年!
步骤分析
可能你对HttpClient的API不熟悉,那么如何在项目中快速使用HttpClient呢?
这里已经封装了两个最常用的get和post请求方法,所以之前就让你别担心啦~^_^
- /**
- * Http工具类
- *
- * @author Zhu
- *
- */
- public class HttpUtils {
- private static CloseableHttpClient httpClient = HttpClients.createDefault();
- private static HttpClientContext context = new HttpClientContext();
- private HttpUtils() {
- }
- public static String sendGet(String url) {
- CloseableHttpResponse response = null;
- String content = null;
- try {
- HttpGet get = new HttpGet(url);
- response = httpClient.execute(get, context);
- HttpEntity entity = response.getEntity();
- content = EntityUtils.toString(entity);
- EntityUtils.consume(entity);
- return content;
- } catch (Exception e) {
- e.printStackTrace();
- if (response != null) {
- try {
- response.close();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- }
- return content;
- }
- public static String sendPost(String url, List<NameValuePair> nvps) {
- CloseableHttpResponse response = null;
- String content = null;
- try {
- // HttpClient中的post请求包装类
- HttpPost post = new HttpPost(url);
- // nvps是包装请求参数的list
- if (nvps != null) {
- post.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
- }
- // 执行请求用execute方法,content用来帮我们附带上额外信息
- response = httpClient.execute(post, context);
- // 得到相应实体、包括响应头以及相应内容
- HttpEntity entity = response.getEntity();
- // 得到response的内容
- content = EntityUtils.toString(entity);
- // 关闭输入流
- EntityUtils.consume(entity);
- return content;
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (response != null) {
- try {
- response.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return content;
- }
- }
现在get和post对你来说都已经轻而易举了,那么开始模拟登陆吧~
模拟登陆实战
- /**
- * 获取必要的登陆参数信息
- *
- * @throws IOException
- */
- private void fetchNecessaryParam() throws IOException {
- // 查看CSDN登陆页面源码发现登陆时需要post5个参数
- // name、password,另外三个在页面的隐藏域中,a good start
- logger.info("获取必要的登陆信息。。。。。");
- // 这样登陆不行,因为第一次需要访问需要拿到上下文context
- // Document doc = Jsoup.connect(LOGIN_URL).get();
- String html = HttpUtils.sendGet(LOGIN_URL);
- Document doc = Jsoup.parse(html);
- Element form = doc.select(".user-pass").get(0);
- lt = form.select("input[name=lt]").get(0).val();
- execution = form.select("input[name=execution]").get(0).val();
- _eventId = form.select("input[name=_eventId]").get(0).val();
- logger.info("获取成功。。。。。");
- }
2、用从1中得到的请求参数和账号密码模拟发送post请求到登陆请求地址
- private boolean mockLogin() {
- logger.info("开始登陆。。。。。");
- boolean result = false;
- List<NameValuePair> nvps = new ArrayList<NameValuePair>();
- nvps.add(new BasicNameValuePair("username", username));
- nvps.add(new BasicNameValuePair("password", password));
- nvps.add(new BasicNameValuePair("lt", lt));
- nvps.add(new BasicNameValuePair("execution", execution));
- nvps.add(new BasicNameValuePair("_eventId", _eventId));
- String ret = HttpUtils.sendPost(LOGIN_URL, nvps);
- if (ret.indexOf("redirect_back") > -1) {
- logger.info("登陆成功。。。。。");
- result = true;
- } else if (ret.indexOf("登录太频繁") > -1) {
- logger.info("登录太频繁,请稍后再试。。。。。");
- } else {
- logger.info("登陆失败。。。。。");
- }
- return result;
- }
题外话:
模拟登陆CSDN——就是这么简单相关推荐
- 模拟登陆CSDN -- Python爬虫练习之正则表达式和cookie
这周学习的主题是正则表达式和cookie,原本是计划每天晚上11点下班到家,练上一两个钟就把这部分过了,结果这周各种事情和不再状态,所以没整完,直至今天才把相关问题过掉.其实这部分也挺不错的,也并没有 ...
- python项目实战:模拟登陆CSDN
2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家介绍一个利用Python模拟登陆CSDN的案例,虽然看起来很鸡肋,有时候确会有大用处,在这里就当做是一个案例练 ...
- python 大众点评模拟登陆_python项目实战:模拟登陆163邮箱,简单到爆
前言 相信大家都会做一些有趣的Python项目,对于小白的我们来说,如果成功了的话,那成就感是非常爆棚的的,这也是非常有助学习. 接下来,为大家介绍一个selenium 模拟登陆163邮箱的代码 首先 ...
- 利用requests 模拟登陆csdn
环境:python3.6.1 + lxml4.0.0 + requests2.18.4 坑一:登陆时请求的网址需要构造,数据在form标签属性里, 坑二:表单数据的提取 坑三:登陆后的跳转,不然无法访 ...
- Python 模拟登陆神库!集合了20+个平台的模拟登陆脚本
Awesome-python-login-model 是一个国人开发的模拟登陆仓库,在这个仓库上有20几个网站的模拟登陆脚本,你可以基于这个仓库实现的代码做简易的修改,以实现自己的自动化功能. 仓库地 ...
- 【转】使用C#发送Http 请求实现模拟登陆(以博客园为例)
[转]使用C#发送Http 请求实现模拟登陆(以博客园为例) 模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到cookie即可实现模拟登陆,比如一些抢票软件的原理无非也 ...
- python如何实现模拟登录_超详细的Python实现新浪微博模拟登陆(小白都能懂)
最近由于需要一直在研究微博的爬虫,第一步便是模拟登陆,从开始摸索到走通模拟登陆这条路其实还是挺艰难的,需要一定的经验,为了让朋友们以后少走点弯路,这里我把我的分析过程和代码都附上来. 首先,我们先用正 ...
- 使用C#发送Http 请求实现模拟登陆(以博客园为例)
使用C#发送Http 请求实现模拟登陆(以博客园为例) 原文:使用C#发送Http 请求实现模拟登陆(以博客园为例) 模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到c ...
- DecryptLogin:python模拟登陆模块
DecryptLogin一个利用requests来模拟登录各大网站的开源包.(项目地址)它支持多个平台的模拟登陆. 一.简单登陆 infos_return:返回一个字典对象,包含用户信息 sessio ...
最新文章
- iOS progressive Web App (PWA) 技术
- mean,std,var
- 索引超出矩阵维度_搜索引擎技术之倒排索引原理详解,及案例分析
- 巧用lock解决缓存击穿的解决方案
- SQL 强制指定索引加快查询速度
- opensplice dds v6.3.2_给你看个宝贝,近乎完美的DDS正弦波信号音生成器
- vuex中actions配合mutation处理axios请求
- 风变python学习2---字符串,整数,浮点型数据分析,应用
- Python——语言基础
- php易宝支付扫码支付代码_刷脸支付将颠覆扫码支付——汇刷刷脸支付
- meltdown linux 补丁,宋宝华: ARM64 Linux meltdown修复补丁KPTI的最重要3个patch
- UnityEditor三自定义窗口 案例2
- 分享五个绝对称得上妖艳古怪精灵的前端代码效果
- 【mysql】---php链接数据库---【巷子】
- 《塞尔达传说》与氛围游戏的兴起:在游戏中感受禅意
- 上海滩第一代炒股大户沉浮录
- 修改Android app图标(Android Studio)
- python datetime 时区_Python datetime 如何处理时区信息
- python实现数据可视化软件_基于Python实现交互式数据可视化的工具
- 说说视频号最近有趣的事
热门文章
- mysql从库有张表不同步_mysql主从数据库不同步的2种解决方法
- Chrome中的GPU加速合成
- VVC中对CU进行分类,同时进行分区模式选择
- 差分隐私:原理,应用与展望
- 拆解 米家扫地机器人_小米米家机器人值得买吗?小米米家扫地机器人拆解图解...
- thisis incompatible with sql_mode=only_full_group
- 「学习笔记」多项式的蛇皮操作
- 操作系统之虚拟存储管理 java python 实现 最优(Optimal)置换算法 先进先出(FIFO)页面置换算法 LRU(Least Recently Used)置换算法
- JSON文件读写操作详解
- django orm性能优化