用Java模拟网站登录_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 用Java模拟网站登录

用Java模拟网站登录

 2013/11/6 19:10:53  tanjiayqq  程序员俱乐部  我要评论(0)
  • 摘要:本文为原创,转载请声明来源和作者,谢谢!作者:tanjiayqq(_cha1R)如何用Java代码模拟一些如百度、QQ之类的网站登录?有两个方式,一是发送模拟请求,二是模拟浏览器操作,而这两种方式恰好在Java有开源实现,在这里介绍一个工具包,它是家喻户晓的HttpClient。HttpClient是ApacheJakartaCommon下的子项目,至于它是干什么用的呢?简单来说就是:它像浏览器一样支持HTTP协议。既然支持HTTP协议,那意味着浏览器能发送的,它也能发送
  • 标签:Java 网站
本文为原创,转载请声明来源和作者,谢谢!

作者:tanjiayqq(_cha1R)

如何用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就像一个浏览器,可以用来发送请求。

class="java" name="code">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();
}
发表评论
用户名: 匿名