模拟登陆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的朋友的学习成本是相当的低的!那么,继续吧骚年!

步骤分析

第一步、首先需要拿到模拟登陆的请求地址,在CSDN登陆页就可以找到:https://passport.csdn.net/account/login,不错,第一步已经成功

第二步、抓包得到post请求需要发送的参数,可以用FF或chrome来抓,如下图所示:

第三步、其中username和password是由我们填的,那么后面三个参数呢?不急,看看登陆页面的源代码

原来在这儿呢!到这里一切都异常的顺利~

整理一下思路,不要被顺利冲昏了头脑~

1、首先我们需要发送一个get请求来得到登陆页面,并从登陆页面上得到三个请求参数

2、用从1中得到的请求参数和账号密码模拟发送post请求到登陆请求地址

3、最后分析post返回的结果判断登陆是否成功

有了思路之后,我们还需要借助编程来实现它,这里需要一个工具——HttpClient

如何简单快速使用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对你来说都已经轻而易举了,那么开始模拟登陆吧~

模拟登陆实战

按照我们先前的思路来前进吧!

1、首先我们需要发送一个get请求来得到登陆页面,并从登陆页面上得到三个请求参数

	/**
	 * 获取必要的登陆参数信息
	 *
	 * @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请求到登陆请求地址

3、最后分析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;
	}

题外话:

模拟登陆之后你就可以随心所欲的操作了~可以写个直接发blog的小程序或者是刷访问量之类的~

不过访问的太频繁可能会被封IP之类的~~~~

若有问题,欢迎大家指正~

时间: 2024-08-04 05:06:05

模拟登陆CSDN——就是这么简单的相关文章

使用C#发送Http 请求实现模拟登陆(以博客园为例)

原文:使用C#发送Http 请求实现模拟登陆(以博客园为例) 模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到cookie即可实现模拟登陆,比如一些抢票软件的原理无非也是这样模拟客户端的cookie 然后发送请求去抢票,然后12306 本文将演示如何用C# 来实现模拟登陆的,推荐一款工具Fiddler,这是一款监听http 请求的利器.废话不多说,我就以博客园为例来实现模拟登陆.首先我登陆博客园 http://passport.cnblogs.com/login.

qtday02 qt做简单的加法器和模拟登陆功能

//在3t2目录下 //adder.h /* qt简单加法计算器 */ #ifndef ADDER_H #define ADDER_H #include<QDialog> #include<QLineEdit> #include<QtWidgets/QPushButton> #include<QtWidgets/QLabel> class Adder:public QDialog{ Q_OBJECT//让自定义的槽函数生效 private: QLineEdi

网络爬虫模拟登陆获取数据并解析实战(二)

目录 分析要获取的数据 程序的结构 构建封装数据的model 模拟登陆程序并解析数据 结果展示 分析要获取的数据 下面继续实战,写一个模拟登陆获取汽车之家,用户信息的程序.如果大家对模拟登陆获取数据不太了解,建议看完http://blog.csdn.net/qy20115549/article/details/52249232,我写的这篇含有抓包获取人人网数据的案例程序,研究透之后,再来看这个要轻松很多. 首先,大家打开汽车之家这个网站(http://i.autohome.com.cn/7741

Python爬虫者的福音!一个神库,汇总了数十个主流网站的模拟登陆方法

网络上有形形×××的网站,不同类型的网站爬虫策略不同,难易程度也不一样.从是否需要登陆这方面来说,一些简单网站不需要登陆就可以爬,比如之前爬过的猫眼电影.东方财富网等.有一些网站需要先登陆才能爬,比如知乎.微信等.这类网站在模拟登陆时需要处理验证码.js 加密参数这些问题,爬取难度会大很多.费很大力气登陆进去后才能爬取想要的内容,很花时间. 是不是一定要自己动手去实现每一个网站的模拟登陆方法呢,从效率上来讲,其实大可不必,已经有前人替我们造好轮子了. 最近发现一个神库,汇总了数十个主流网站的模拟

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

模拟登陆、Cookie传递

---恢复内容开始--- 上个月月底把模拟登陆的问题解决了,现在有时间就正好记录并复习一下. 主要使用httpclient 来进行模拟登陆 首先做一个登陆布局  一直以来都是简单拖几个控件 没有啥特效  这次我想使用一点 Material Design设计风格    查了一下 TextInputLayout这个控件  还不错 TextInputLayout 来自于 Android Design Support Library    可以让edittext的hint在用户输入的时候  自动跳到上方

Scrapy基础(十四)————知乎模拟登陆

#-*-coding:utf-8 -*-__author__ = "ruoniao"__date__ = "2017/5/31 20:59" 之前我们通过爬取伯乐在线的文章,伯乐在线对爬取没有什么限制,这次爬取知乎,就有了爬取限制,首先就是登录限制:为破解限制,首先就是模拟登录 模拟登陆首先要明白的就是session和cookie机制: 简单的说(个人理解):  http是一种无状态的协议,为解决用户每次都需要输入密码登录的烦恼,也为了服务器能够记住每次请求的浏览器

Python实现网站模拟登陆

一.实验简介 1.1 基本介绍 本实验中我们将通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方法,使用 Firefox 抓包分析插件分析网络数据包等知识. 模拟登录可以帮助用户自动化完成很多操作,在不同场合下有不同的用处,无论是自动化一些日常的繁琐操作还是用于爬虫都是一项很实用的技能.本课程通过 Firefox 和 Python 来实现,环境要求如下: Python 库:urllib, ur

Python模拟登陆练习——imooc.com登陆

写下这篇文章的时候,是博主学习python的第三天( 也许是第四天:( ),python是博主接触的第二门解释型语言(第一门是javascript). 讲真在很久之前就想要用博客记录自己的学习历程了,然而就像写日记一样,写着写着就放弃了-.- so今天决定给自己一个好的开端~ 博主的学习方式是直奔目的,遇到问题百度各种博客,网站,百度找不到google找,就这样.这种学习方式是真的见效快,但显而易见,基础会比较薄弱. 因此学习python的基本语法,就直奔爬虫了! ---------------