如何用Java代码模拟一些如百度、QQ之类的网站登录?有两个方式,一是发送模拟请求,二是模拟浏览器操作,而这两种方式恰好在Java有开源实现,在这里介绍一个工具包,它是家喻户晓的HttpClient。
  HttpClient 是 Apache Jakarta Common 下的子项目,至于它是干什么用的呢?简单来说就是:它像浏览器一样支持HTTP协议。既然支持HTTP协议,那意味着浏览器能发送的,它也能发送。我想大家都知道登陆的代码流程,大部分无非就是浏览器端以POST方式提交一个form表单,服务器端收到请求后,判断账户密码做相应处理并且返回结果给浏览器端。但是服务器端并不知道是什么给它发送一个请求,它只针对请求作出相应回应。那么我们就可以利用HttpClient模拟以POST请求方式发送一个表单,不过在这之前,先导入相关的Jar包。
  commons-codec-1.3.jar
  commons-httpclient-3.1.jar
  commons-logging-1.1.1.
  这三个jar是httpclient必须的jar包,当然你的版本号可以是其他的。
  导入完以后,模拟一个HTML表单提交的过程:
  首先要构建一个HttpClient,这个HttpClient就像一个浏览器,可以用来发送请求。

 HttpClient client = new DefaultHttpClient(); //构建一个Client

  假设百度的登陆服务器的地址为http://login.baidu.com/,接下来是构建一个POST请求

 HttpPost post = new HttpPost("http://login.baidu.com/");//构建一个POST请求
//构建表单参数
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new BasicNameValuePair("username", "yourname"));
formParams.add(new BasicNameValuePair("password", "yourpassword"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");//将表单参数转化为“实体”
post.setEntity(entity);//将“实体“设置到POST请求里

现在有POST请求,有表单,有参数 ,那下一步就是提交请求到服务器了

 HttpResponse response = client.execute(post);//提交POST请求

这样就已经完整的模拟了一个浏览器发送POST请求到服务器。大家注意client.execute()完后,会返回一个HttpResponse.利 用这个HttpResponse,我们可以获取到很多东西,如响应头,响应内容,响应Cookie,状态码,返回的输入流等等。下面代码是打印响应的内 容:

 HttpEntity result = response.getEntity();//拿到返回的HttpResponse的"实体"
String content = EntityUtils.toString(result);;//用httpcore.jar提供的工具类将"实体"转化为字符串打印到控制台
System.out.println(content);

我们可以根据HttpResponse返回的状态码、内容等来判断我们是否已经成功登陆百度:

if(content.contains("登陆成功")){
  System.out.println("登陆成功!!!");
}

附上完整代码以便大家测试:

 try {
  HttpClient client = new DefaultHttpClient(); //构建一个Client
  HttpPost post = new HttpPost("http://login.baidu.com/"); //构建一个POST请求
  //构建表单参数
  List<NameValuePair> formParams = new ArrayList<NameValuePair>();
  formParams.add(new BasicNameValuePair("username", "yourname"));
  formParams.add(new BasicNameValuePair("password", "yourpassword"));
  UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");//将表单参数转化为“实体”
  post.setEntity(entity); //将“实体“设置到POST请求里   HttpResponse response = client.execute(post);//提交POST请求
  HttpEntity result = response.getEntity();//拿到返回的HttpResponse的"实体"
  String content = EntityUtils.toString(result);; //用httpcore.jar提供的工具类将"实体"转化为字符串打印到控制台
  System.out.println(content);
  if(content.contains("登陆成功")){
    System.out.println("登陆成功!!!");
  }
} catch (Exception e) {
  e.printStackTrace();
}

HttpClient可以做的还有很多,这只是初步的一个应用。

原文地址:http://www.cnblogs.com/cha1r/p/3396100.html

Java模拟网站登录02【转载】的更多相关文章

  1. Java模拟网站登录

    web登陆无非就是网页获取,cookie 的管理,post和get方式的模拟. 1.网页内容获取 java.io.InputStream in; java.net.URL url = new java ...

  2. cookielib和urllib2模块相结合模拟网站登录

    1.cookielib模块 cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.例如可以利用 本模块的CookieJar类的对 ...

  3. c# winform实现网页上用户自动登陆,模拟网站登录

    using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO ...

  4. JAVA,模拟HTTP登录(略有修改) ----转载自http://zhoujingxian.iteye.com/blog/439738

    /* * 网上的一个模拟登录或者模拟注册程序 * 2013-8-5 */ package Socket_Http; import java.io.BufferedReader; import java ...

  5. 利用 cookie 模拟网站登录

    import urllib import urllib2 import cookielib filename = 'cookie.txt' \#声明一个MozillaCookieJar对象实例来保存c ...

  6. java模拟用户登录(排除没有验证码情况下,抓取网页信息)

    import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import j ...

  7. HttpWebRequest 模拟网站登录获取数据

    此文档仅仅是一个BaseCode,已做后续查阅 项目使用IBM Platform Symphony分布式平台,所有业务处理都在这个分布式平台上计算,需求是获取这些计算机机群的运行状态,和每一个服务的的 ...

  8. cookielib和urllib2模块结合模拟网站登录

    1.cookielib模块 cookielib模块的主要作用就是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问internet资源,例如可以利用本模块的cookiejar类的对 ...

  9. Java模拟登录系统抓取内容【转载】

    没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下....     为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...

随机推荐

  1. Buffer cache 的调整与优化

    Buffer cache 的调整与优化 -============================== -- Buffer cache 的调整与优化(一) --==================== ...

  2. 常用的PL/SQL开发原则

    (1)广泛使用绑定变量,特别是批量绑定,因为这可以有效的避免sql的硬解析和PL/SQL引擎和SQL引擎的上下文切换!(2)广泛使用UROWID来处理DML语句(UROWID是ROWID扩展,ORAC ...

  3. Hibernate管理Session和批量操作

    Hibernate管理Session Hibernate自身提供了三种管理Session对象的方法 Session对象的生命周期与本地线程绑定 Session对象的生命周期与JTA事务绑定 Hiber ...

  4. C# WinForm中 让控件全屏显示的实现代码

    夏荣全 ( lyout(at)163.com )原文 C#中让控件全屏显示的实现代码(WinForm) 有时候需要让窗口中某一块的内容全屏显示,比如视频播放.地图等等.经过摸索,暂时发现两种可行方法, ...

  5. 修改linux主机名称

    linux修改主机名如下操作即可: [root@kel ~]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAM ...

  6. 将数据库从普通文件系统迁移到ASM中

    数据库存储的是普通的文件系统,现在将数据库迁移到ASM存储中. 准备ASM环境: [oracle@kel ~]$ asmcmd ASMCMD> ls ASM/ KEL/ ASMCMD> 在 ...

  7. 【和我一起学Python吧】Python3.0与2.X版本的区别

    做为一个前端开发的码农,却正在阅读最新版的<A byte of Python>.发现Python3.0在某些地方还是有些改变的.准备慢慢的体会,与老版本的<A byte of Pyt ...

  8. [Hive - LanguageManual] DML: Load, Insert, Update, Delete

    LanguageManual DML Hive Data Manipulation Language Hive Data Manipulation Language Loading files int ...

  9. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结

    8.弹幕系统 弹幕系统概述: 弹幕系统的设计体现了射击游戏的基本要素,玩家要在敌人放出的大量子弹(弹幕)的细小空隙间闪避,能在玩家闪躲弹幕的时候给玩家带来快感,接近满屏的子弹,增加了对玩家的视觉冲击力 ...

  10. Codeforces 380 简要题解

    ABC见上一篇. 感觉这场比赛很有数学气息. D: 显然必须要贴着之前的人坐下. 首先考虑没有限制的方案数.就是2n - 1(我们把1固定,其他的都只有两种方案,放完后长度为n) 我们发现对于一个限制 ...