`
tanjiayqq
  • 浏览: 20272 次
文章分类
社区版块
存档分类
最新评论
阅读更多
本文为原创,转载请声明来源和作者,谢谢!

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

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();
}
分享到:
评论

相关推荐

    java httpclient 模拟登录

    在"java httpclient 模拟登录"这个场景下,我们通常会用到HttpClient来模拟用户登录网站的过程,获取登录后的session信息,以便后续能够访问登录后才能看到的页面内容。以下将详细介绍如何使用Java HttpClient进行...

    java模拟淘宝登录源码

    Java模拟淘宝登录源码是一种常见的网络编程技术,主要用于自动化测试、数据抓取或者模拟用户行为。在这个场景中,我们使用的工具是HTTPClient库,这是一个强大的Java HTTP客户端应用编程接口,可以方便地处理HTTP...

    java 模拟登录(含验证码)

    综上所述,Java模拟登录结合OCR技术可以实现自动化登录过程,提高工作效率。通过tess4j库,我们可以方便地识别和处理验证码,使得这个过程更加完整和实用。在开发过程中,理解HTTP协议、掌握相关库的使用以及熟悉OCR...

    Java模拟登录百度Demo

    本项目名为"Java模拟登录百度Demo",旨在通过Java编程语言实现对百度网站的自动登录功能。在这个教程中,我们将深入探讨如何使用Java来完成这一目标。 首先,模拟登录的核心是发送HTTP请求。在Java中,我们可以使用...

    Java 模拟cookie登陆简单操作示例

    我们可以使用 Java 语言来发送 HTTP 请求,并将 Cookie 信息写入到 HTTP 头部中,以便模拟用户的登陆行为。 Java 模拟 Cookie 登陆的实现 下面是一个简单的 Java 模拟 Cookie 登陆的示例代码: ```java import ...

    最新版java模拟QQ登录空间

    【Java模拟QQ登录空间】是Java编程领域中的一个实践项目,主要目的是通过编程技术实现对QQ空间的模拟登录。这个项目对于学习Java网络编程、HTTP协议、JSON解析以及网络安全等多方面知识具有重要意义。 首先,Java是...

    java模拟浏览器访问网站

    用java模拟访问浏览网站的代码,可以输出各种网页属性,以及html源代码

    JAVA 模拟网页是登录

    本篇将详细探讨如何使用Java和JSOUP库来模拟网页登录,以及涉及的相关HTML解析知识。 首先,我们要理解模拟登录的基本流程:获取登录页面的HTML,解析出表单数据(如用户名、密码输入框的ID或name),然后构造POST...

    java实现模拟登录网站最全的资料

    Java实现模拟登录网站是一项常见的任务,特别是在自动化测试、数据抓取和网络爬虫等领域。以下是一些关于这个主题的关键知识点: 1. **网络请求库**:在Java中,`HttpURLConnection`是内置的HTTP客户端,但为了更...

    java模拟微信web登录平台

    总的来说,Java模拟微信Web登录平台是一个涉及网络编程、JSON处理、事件驱动编程等多个领域的技术挑战。通过ItChat4J这样的库,我们可以简化这个过程,快速地构建自己的微信机器人。记得在使用开源库时,遵循其许可...

    java使用Selenium模拟登陆58(验证码登陆&密码登陆)若快平台识别文字点击验证码Demo

    Java 使用 Selenium 模拟登录58同城的流程涉及到了多个技术点,包括自动化测试框架Selenium的使用、验证码识别以及密码登录的实现。下面将详细解释这些知识点。 1. **Selenium**: Selenium 是一个用于 Web 应用程序...

    Java 模拟线程并发

    总之,Java模拟线程并发是一个广泛且深入的话题,涵盖了线程的创建、同步、管理和高级并发工具的使用。理解和熟练应用这些知识,能够帮助开发者编写出高效、安全的多线程程序。在实际开发中,应根据具体需求选择合适...

    java模拟微信浏览器访问.rar

    这个“java模拟微信浏览器访问.rar”压缩包中的主要文件是“MonitorWeixinBrowser.java”,我们可以推测这是一个Java程序,用于模拟微信内置浏览器的行为。下面将详细介绍这个主题的相关知识点。 1. **Java HTTP ...

    java中使用session模拟用户登陆

    本篇文章将详细讲解如何在Java中使用Session来模拟用户登录。 首先,我们需要理解Session的工作原理。Session是服务器为每个客户端(浏览器)创建的一个数据存储结构,通常是一个HashMap。当用户登录时,服务器会...

    java模拟键盘鼠标

    这个"java模拟键盘鼠标"的项目,从描述来看,主要是用于批量登录QQ账号,这涉及到Java自动化控制的实现。下面我们将深入探讨相关的Java知识点。 1. **Java Robot类**: Java中的`java.awt.Robot`类是用于生成用户...

Global site tag (gtag.js) - Google Analytics