`
j夫子
  • 浏览: 91624 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

httpclient4初探_完成有验证码的注册

    博客分类:
  • java
 
阅读更多

我们知道,网站走的是http/https等协议,通过这些协议,我们能在浏览器中完成网站的注册,登录,发表文章,上传文件等一系列操作。呵呵,讲到用浏览器,意味着我们必须用我们的鼠标,键盘进行操作,如果是你要进行大量的重复性操作的话,是不是就略显疲惫了?比如你要反复的登录,然后去给某人投票?本人以前就在寝室反复地从excel里面复制用户名密码登录,投票,注销,为一个学姐刷票...刷抽筋了。
现在通过httpclient这个apache common这个第三方api,就可以很轻松地把这些工作都交给程序来做。

我这里演示的是注册一个验证码的博客,简单地介绍下httpclient4的使用。
ps.博客是我以前做的,基于jsp/servlet

 

1.首页


 

2.查看该页面的源代码 这里只看form表单

 

<form name="reg" action="regist.do" method="post" onSubmit="return checkdata()">
        <center>
                <table width=600 border=0>
                <tr><td>
                用户名</td>
 <td width=60><input type="text" name="username" onBlur="checkUsername()"></td><td width=400><font color=red>*<button onclick="checkUser()">检测用户名</button><span id="usernameE"></span></font></td>
			</tr>
			<tr><td>
			 密码 </td>
		        <td width=60><input type="password" name="password" onBlur="checkPassword()"></td><td width=300><font color=red>*<span id="passwordE"></span></font></p></td></tr>
		    <tr><td>
			 重复密码 </td>
		     <td width=60> <input type="password" name="repassword" onBlur="checkRePassword()" ></td><td width=300><font color=red>*<span id="repasswordE"></span></font></p></td></tr>
			 <tr><td>
			姓名</td>
			 <td width=60>  <input type="text" name="name" onBlur="checkRealName()"></td><td width=300><font color=red>*<span id="nameE"></span></font></p></td></tr>
			<tr><td>
			性别		</td>
			<td width=200> 
			  <label>
			  <input type="radio" name="sex" value="0" >
男</label>
			  <label>
			  	<input type="radio" name="sex" value="1">

女</label>

			  <label>

			  <input type="radio" name="sex" value="2" checked="checked">

不详</label></td> </tr>

			<tr><td>

			邮箱</td>

			   <td width=60> <input type="text" name="email" onblur="checkMail()"></td><td width=300><font color=red>*<span id="mailE"></span></font></p></td></tr>

			<tr><td>

			   验证码</td><td width=60><input type="text" name="ccode" onblur="checkCode()"/></td>

			<td width=300> <img id="code" src="Checkcode?"+1335096054921 />

	[url=javascript:;]看不清,换一个[/url]</p></td></tr>

			  <tr><td>

			    <input type="submit" name="submit" value="提交">

			    </label>	

			    <label>

			    <input name="reset" type="reset" id="reset" value="重置">

			    </label>

			    </td></tr>

			    </table>

			    </center>

			  </form>
 
3.这个表单是要提交到 regist.do 这个servlet,提交的信息有如下属性

username------用户名
password------密码
name------姓名
sex------性别
email------邮箱
ccode------验证码

需要注意的是:
验证码</td><td width=60><input type="text" name="ccode" onblur="checkCode()"/></td>

<td width=300> <img id="code" src="Checkcode?"+1335096054921 />
<img>连接的是一个servlet:Checkcode,后面跟的是随机数,防止得到缓存数据

知道了如上信息后,我们就可以开始编写程序了。
首先创建一个java project
导入httpclient所需要的Jar包 我这里用的是最新版
下载地址 http://hc.apache.org/downloads.cgi


4.代码
public class FormDemo {
	public static void main(String[] args) throws ClientProtocolException,
			IOException {
		DefaultHttpClient httpclient = new DefaultHttpClient();
		//登录和发表文章先不做讨论
//		login(httpclient);
//		postArticle(httpclient);
                //注册
		regist(httpclient);
                //关闭Httpclient
		httpclient.getConnectionManager().shutdown();

	}
	/**
	 * 注册
	 * @param httpclient
	 * @throws IOException 
	 * @throws ClientProtocolException 
	 */
	private static void regist(DefaultHttpClient httpclient) throws ClientProtocolException, IOException {
		/**
		 * 下载验证码
		 */
                //验证码生成的大概原理就是随即生成一个验证码字符串(0-9,a-z),然
                //后用io流和图片流将验证码写入图片中,最后将图片用servlet writer出                                                                                                                                     
                  //通过get方式访问该servlet,得到验证码图片		
HttpGet httpget = new HttpGet("http://localhost:8080/blog/Checkcode?"+new Random().nextInt(1000));
                 //执行get请求
		HttpResponse response =  httpclient.execute(httpget);
                //我们把返回的信息,保存在本地的一张图片里
		File file = new File("regist.jpg");
		OutputStream ops = new FileOutputStream(file);
		response.getEntity().writeTo(ops);
		ops.close();
		/**
		 * 这时我们可以弹出一个JFrame来显示刚刚保存的验证码,我现在做的是                   验证码手动输入,当然还可以做程序来读验证码。
		 */
		JFrame frame= new JFrame();
		frame.setVisible(false);
		frame.setBounds(100, 100, 100, 100);
		frame.setLayout(new FlowLayout());
		ImageIcon icon  = new ImageIcon("regist.jpg");
		frame.add(new JLabel(icon));
		frame.setVisible(true);
		
		/**
		 * 在控制台输入验证码
		 */
		System.out.println("输入你看到的验证码");
		Scanner scr = new Scanner(System.in);
		String code = scr.nextLine();
		
		EntityUtils.consume(response.getEntity());
		//提交注册请求到regist.do,并以post方式提交一个表单,就是刚刚我们看到的注册信息
		HttpPost post = new HttpPost("http://localhost:8080/blog/regist.do");
		List<NameValuePair> nvps = new ArrayList<NameValuePair>();
		nvps.add(new BasicNameValuePair("username", "ydxx1"));
		nvps.add(new BasicNameValuePair("password", "zhao1"));
		nvps.add(new BasicNameValuePair("repassword", "zhao1"));
		nvps.add(new BasicNameValuePair("name", "zhao12"));
		nvps.add(new BasicNameValuePair("sex", "1"));
		nvps.add(new BasicNameValuePair("email", "dsfsd@126.com"));
                //把控制台输入的验证码填入
		nvps.add(new BasicNameValuePair("ccode", code));
		post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
		
		response = httpclient.execute(post);
		System.out.println(response.getStatusLine());
		EntityUtils.consume(response.getEntity());
	}
}
 


5.效果



这里我们就看到了刚通过程序注册的用户


需要注意的是,在程序中必须保证是同一个HttpClient对象,因为它里面保存了jsessionid,而验证码也是保存在session里的,如果是不同的httpclient对象,那你得到的验证码和现在服务端所生成的验证码并不是同一个,就不能注册成功了。

忘记截图了,这张是后来截的
弹出的jframe

 

  • 大小: 158.5 KB
  • 大小: 10.9 KB
  • 大小: 2 KB
  • 大小: 5.5 KB
  • 大小: 2 KB
  • 大小: 2.5 KB
1
0
分享到:
评论
1 楼 liutao1600 2013-05-12  
太好了~~~~~

相关推荐

    2024嵌入式大厂面经C++首创

    2024嵌入式大厂面经C++首创提取方式是百度网盘分享地址

    C++ 高性能爬虫代码,带UI

    C++ 高性能爬虫代码,带UI

    2024嵌入式面试资料裕日软件C笔试题

    2024嵌入式面试资料裕日软件C笔试题提取方式是百度网盘分享地址

    黑色素瘤分类数据集10015张7类别.7z

    数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):10015 分类类别数:7 类别名称:[“0”,“1”,“2”,“3”,“4”,“5”,“6”] 更多信息:blog.csdn.net/FL1623863129/article/details/139561265

    2024年高尿酸及痛风疾病医药行业分析报告.pptx

    行业报告

    自由生活条件中老年人体力活动的分类研究

    体力活动对老年人的身心健康有很大影响。研究表明 65 岁以上的老年人缺少必要的体力锻炼,会增加跌倒的风险、会阻碍行动、会降低肌肉力量和丧失自主能力。积极的生活方式有助于老年人降低残疾和慢性病的风险,从而提高老年人的身心健康和幸福指数。世界卫生组织的一份报告表示,积极运动的老年人肌肉适应力强,器官功能正常,因此他们跌倒的风险比较低,并且拥有很高的认知能力。世界卫生组织建议老年人每周进行 30 分钟或 30 分钟以上的体力活动,每周 5 次不低于 10 分钟的适度体力活动或高水准的体力活动,来确保老年人的健康需求。因此,通过长期对日常活动等数据特征分析,可以更好的规划出,每天体力活动和久坐的时间比,从而提高老年人生活的质量。近年来,由于可穿戴设备在加工率、电池寿命、小型化和成本效益等方面的科技进 步,可穿戴监控设备得到快速发展。在过去的几年里,我们做了大量的工作,利用加速计、陀螺仪等惯性传感器设备,对老年人的体力活动进行监督测量。大多数现有的系统都是根据青少年指标获得数据集进行开发验证的,很少有系统将老年人纳入其数据采集范围。Rosario 等研究人员,用 PAC 系统对年轻人进行测试,并

    上市公司污染排放当量(2007-2022).xlsx

    详细介绍及样例数据:https://blog.csdn.net/T0620514/article/details/139567890

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本116.0.5841.0)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom116.0.5841.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver116.0.5841.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    2024嵌入式面试资料禾赛科技2021嵌入式开发

    2024嵌入式面试资料禾赛科技2021嵌入式开发提取方式是百度网盘分享地址

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本115.0.5790.90)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom115.0.5790.90 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver115.0.5790.90 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    华为OD机试C卷- 欢乐的周末(Java & JS & Python & C).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本115.0.5773.4)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom115.0.5773.4 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver115.0.5773.4 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    2023全球财富报告(英)-2023-76页.pdf

    2023全球财富报告(英)-2023-76页.pdf

    2024嵌入式面试资料指针经验总结

    2024嵌入式面试资料指针经验总结提取方式是百度网盘分享地址

    C++ MPI多进程并发

    C++ MPI多进程并发

    毕设:企业员工绩效考评系统的设计与实现-java语言的前后端分离的webapp

    本项目是java语言的前后端分离的webapp: ● 前端:html+mui+jquery,HBuilder开发,nginx部署 ● 后端:jdk8+springboot+mybatisPlus,idea开发,tomcat部署 ● 由于前后端分开开发,会产生跨域问题,故开发中用nginx做代理服务器 企业员工绩效考评系统是一个涉及人力资源管理、数据分析和技术实现的复杂项目。使用Java语言进行前后端分离的Web应用开发是一个不错的选择,因为它能够提供稳定、可扩展和易于维护的解决方案。以下是一个基于Java语言的企业员工绩效考评系统的设计与实现建议: 1. 需求分析 用户角色:确定系统的主要用户角色,如员工、部门经理、人力资源部门等。 核心功能: 员工自我评估:员工可以定期进行自我评估,提交工作表现和目标完成情况。 上级评估:部门经理可以对下属员工进行绩效评估,并提供反馈。 数据汇总与分析:人力资源部门可以汇总员工绩效数据,进行统计分析和报告生成。 实时通知与提醒:系统能够及时通知员工和管理者有关绩效评估的相关信息。 2. 技术选型 前端:HTML5、CSS3、JavaScript(可

    2024嵌入式面试资料2022交大捷普社招-C开发

    2024嵌入式面试资料2022交大捷普社招-C开发提取方式是百度网盘分享地址

    毕业设计-基于四元数变换的彩色图像水印算法设计与实现.zip

    毕业设计-基于四元数变换的彩色图像水印算法设计与实现. 题目:基于四元数变换的彩色图像水印算法设计与实现 ● 变换算法: QDFRNT, 四元数分数阶随机变换 、 QDFRFT, 四元数分数阶傅里叶变换 ● 水印算法: ● 基于 SVM 的自适应彩色图像水印算法 ● 基于量化的自适应彩色图像水印算法 ( TODO ### 一、引言 #### 1.1 研究背景 随着数字技术的飞速发展和广泛应用,图像已成为信息传播的重要形式之一。然而,由于图像易于复制和篡改,版权保护问题日益突出。水印作为一种有效的版权保护手段,通过在图像中嵌入不易察觉的标志或图案来标识图像的所有权,从而防止未经授权的复制和分发。传统的水印方法主要依赖于像素级别的操作,如改变图像的颜色或纹理,但这些方法容易被分析和去除。近年来,四元数变换作为一种非线性几何变换,被应用于图像处理领域,为水印算法的改进提供了新的思路。 #### 1.2 研究目的 本研究的目的是设计和实现一种基于四元数变换的彩色图像水印算法。通过在水印图像上施加四元数变换,使得水印对原图像的视觉质量影响最小,同时提高算法的鲁棒性,使其能够在多种图像处理操作(

    2024年小型通用减速机行业分析报告.pptx

    行业报告

    华为OD机试C卷- 迷宫问题(Java & JS & Python).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

Global site tag (gtag.js) - Google Analytics