模拟登陆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的朋友的学习成本是相当的低的!那么,继续吧骚年!
步骤分析
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM0NTI4Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM0NTI4Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
怎样简单高速使用HttpClient
可能你对HttpClient的API不熟悉。那么怎样在项目中高速使用HttpClient呢?
这里已经封装了两个最经常使用的get和post请求方法,所以之前就让你别操心啦~^_^
假设不想花时间看API的话直接拿去用就能够了
/**
* 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中得到的请求參数和账号password模拟发送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——就是这么简单的更多相关文章
- win10 uwp httpClient 登陆CSDN
本文告诉大家如何模拟登陆csdn,这个方法可以用于模拟登陆其他网站. HttpClient 使用 Cookie 我们可以使用下面代码让 HttpClient 使用 Cookie ,有了这个才可以保存登 ...
- pytho简单爬虫_模拟登陆西电流量查询_实现一键查询自己的校园网流量
闲来无事,由于校园内网络是限流量的,查询流量很是频繁,于是萌生了写一个本地脚本进行一键查询自己的剩余流量. 整个部分可以分为三个过程进行: 对登陆时http协议进行分析 利用python进行相关的模拟 ...
- python模拟登陆豆瓣——简单方法
学爬虫有一段时间了,前面没有总结又重装了系统,导致之前的代码和思考都没了..所以还是要及时整理总结备份.下面记录我模拟登陆豆瓣的方法,方法一登上了豆瓣,方法二重定向到了豆瓣中“我的喜欢”列表,获取了第 ...
- Java模拟登陆02【转载】
在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢? 方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时 ...
- 使用OKHttp模拟登陆知乎,兼谈OKHttp中Cookie的使用!
本文主要是想和大家探讨技术,让大家学会Cookie的使用,切勿做违法之事! 很多Android初学者在刚开始学习的时候,或多或少都想自己搞个应用出来,把自己学的十八般武艺全都用在这个APP上,其实这个 ...
- 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)
urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...
- 模拟登陆,selenium,线程池
一 . 模拟登陆案例(识别验证码) 1 . 打码平台 - 云打码 : www.yundama.com 使用步骤 : - 注册两个账户,普通用户和开发者用户 : - 登陆 普通用户查看余额 登陆开发 ...
- Python 爬虫模拟登陆知乎
在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
- Python模拟登陆新浪微博
上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...
随机推荐
- 从源码分析StringUtils包
今天用到StringUtils.join方法,闲来无聊,看了下源码 当然不可能自己分析,你傻啊,在这里推荐一个别人分析的; http://blog.csdn.net/baidu_31071595/ar ...
- (四)Jsoup 获取 DOM 元素属性值
第一节: Jsoup 获取 DOM 元素属性值 Jsoup获取DOM元素属性值 比如我们要获取博客的href属性值: 我们这时候就要用到Jsoup来获取属性的值 : 我们给下示例代码: package ...
- 大家来探讨下,IRepository 应该怎么定义?
ORM已EF为例子:我见的最多的是泛型的IRepository, public partial interface IRepository<T> where T : BaseEntity{ ...
- OneNote无法同时设置中英文字体设置解决办法
如果你是一位OneNote老用户,无论是2003.2007还是2010或者最新的2013版本,都一直存在一个Bug,就是无法同时设置中英文字体(比如在Word中就可以分别设置不同的).我搜了一下,在微 ...
- centos7.3 chrome 安装
/etc/yum.repos.d/目录下新建文件google-chrome.repo,向其中添加如下内容: [google-chrome] name=google-chrome baseurl=htt ...
- lr11录制时报“Request Connection: Remote Server @ 0.0.0.0:1080 (Service=?) NOT PROXIED! )”解决方法
在录制脚本的时候出现如下现象: 解决方法: LoadRunner录制脚本时出现:Unable to connect to remote server),有事件没有脚本的问题 1.首先要查看IE浏览 ...
- Unity:控制粒子特效的移动方向
前几天在项目中遇到一个问题,需求是界面中先展示一段闪光特效,停顿一段时间后特效飞往一个固定的位置然后消失,类似于跑酷游戏吃到金币后金币飞往固定的金币数值显示框那种效果(具体是通过特效来实现还是直接通过 ...
- MapReduce与批处理------《Designing Data-Intensive Applications》读书笔记14
之前的文章大量的内容在和大家探讨分布式存储,接下来的章节进入了分布式计算领域.坦白说,个人之前专业的重心侧重于存储,对许多计算的内容理解可能不是和确切,如果文章中的理解有所不妥,愿虚心赐教.本篇将和大 ...
- HDU - 2199 Can you solve this equation? 二分 简单题
Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- 初识Spring——Spring核心容器
一. IOC和DI基础 IOC-Inversion of Control,译为控制反转,是一种遵循依赖倒置原则的代码设计思想. 所谓依赖倒置,就是把原本的高层建筑依赖底层建筑“倒置”过来,变成底层建筑 ...