`

Java制作自动访问网站机器人!(转)

阅读更多

如何制作一些论坛的自动发言机器人?(如果没有图片验证码的话!)在Java里,有些URL,URLConnection的类,这些类可以访问一个URL获取数据,可以发送Request,你就可以结合一些类做一个自动发言的了,但用Post发送表单的话,就没有直接的,比较麻烦,如果还要处理Cookie的话,之后我想了想,想到了可以用 Jakarta Commons 下面的开源项目啊,有一个项目名叫“HttpClient”的,这个就是用Java写的Http客户端,可以说是一个简单功能的浏览器吧,只是不能解析 HTML标签,写这个解析可不是易事。既然我们是写个自动访问网站的程序,就不用解析显示HTML啦。朋友说能写个招聘网站的自动刷新简历的程序就好了,那就用51job为例吧。
      首先,你得去下载HttpClient的包。
http://jakarta.apache.org/commons/httpclient

代码不多,我们就先来看看代码吧:

Java代码 复制代码
  1. import java.io.*;   
  2.   import org.apache.commons.httpclient.*;   
  3.   import org.apache.commons.httpclient.methods.*;   
  4.      
  5.   public class HttpTest {   
  6.      
  7.       /**  
  8.        * @param args  
  9.        * @throws Exception  
  10.       */  
  11.      public static void main(String[] args) {   
  12.          //先建立一个客户端实例,将模拟一个浏览器   
  13.          HttpClient client = new HttpClient();   
  14.            
  15.          //这个是URL地址,我经过分析51job网站登录后的跳转到的地址,并分析得它在JavaScript里提交的URL的参数,不同网站就自已分析了,这个就是登录后刷新简历的URL地址   
  16.          String url = "http://my.51job.com/my/Pop_RefreshResume.php?en=0&ReSumeID=88888888&Read=0&ID=88888888";   
  17.            
  18.          //之后再建立一个Post方法请求,提交刷新简历的表单,因为提交的参数较多,所以用Post请求好了   
  19.          PostMethod method = new PostMethod(url);   
  20.     
  21.          //下面的就是将要提交的表单的数据填入PostMethod对象里面,以name , value 对加入!   
  22.          method.addParameter("HPNation""086");   
  23.          method.addParameter("HPCity","020");   
  24.          method.addParameter("HPNumber","88888888");   
  25.          method.addParameter("FPNation","086");   
  26.          method.addParameter("FPCity","020");   
  27.          method.addParameter("FPNumber","88888888");   
  28.          method.addParameter("FPExtension","000");   
  29.          method.addParameter("MPNation","086");   
  30.          method.addParameter("Mobile","13888888888");   
  31.          method.addParameter("EmailAdd","888@888.com");   
  32.          method.addParameter("ReSumeID","88888888");   
  33.            
  34.          //这里是建立请求时服务器需要用到的Cookie。   
  35.          Cookie cookie = new Cookie(".51job.com","51job","ccry%3D.0%252FZKBaMTmj82%26%7C%26cconfirmkey%3DcpwWgp7FC9FZM%26%7C%26cresumeid%3D88888888%26%7C%26cresumeids88888888d888826%7C8408ilstatus%3D2%26%7C%26cnickname826cenglis8cautologin%3D","/",null,false);   
  36.            
  37.          //将设置好的Cookie加入模拟的客户端里。当请求发生时,就会将Cookie写进请求头里了   
  38.          client.getState().addCookie(cookie);   
  39.          int i=0;    
  40.          //开始死循环   
  41.          while(true){   
  42.              try{   
  43.                  //这里是要求客户端发送一个请求。直接将PostMethod请求出去。   
  44.                  client.executeMethod(method);   
  45.                    
  46.                  //下面是获取返回的结果   
  47.                  InputStream in = method.getResponseBodyAsStream();   
  48.                  ByteArrayOutputStream baos = new ByteArrayOutputStream();   
  49.                  byte[] buff = new byte[1024];   
  50.                  int len = -1;   
  51.                  while((len=in.read(buff))!=-1){   
  52.                      baos.write(buff, 0, len);   
  53.                  }   
  54.                  String result = new String(baos.toByteArray());   
  55.                    
  56.                  //释放资源   
  57.                  in.close();   
  58.                 baos.close();   
  59.     
  60.                  //在51job里,刷新简历成功的话,会返回一些JavaScript代码,里面有个alert()输出“简历已刷新”的信息的,你分析结果,如果有这句话,则成功刷新了。之后就让线程睡眠1分钟后循环刷新!   
  61.                  if(result.indexOf("简历已刷新")!=-1){   
  62.                      System.out.println("简历已刷新! " + ++i);   
  63.                  }else{   
  64.                      System.out.println("刷新失败!");   
  65.                  }   
  66.                  Thread.sleep(60000);   
  67.              }catch(Exception ex){   
  68.                  System.out.println("******** Error! ********");   
  69.                  try{   
  70.                      //出现错误时,再等待20秒后再重新进行刷新。   
  71.                     Thread.sleep(20000);   
  72.                  }catch(Exception e){   
  73.                     System.out.println("******** Thread Error! ********");   
  74.                  }   
  75.              }   
  76.          }   
  77.      }   
  78.     
  79. }  
import java.io.*;
  import org.apache.commons.httpclient.*;
  import org.apache.commons.httpclient.methods.*;
  
  public class HttpTest {
  
      /**
       * @param args
       * @throws Exception
      */
     public static void main(String[] args) {
         //先建立一个客户端实例,将模拟一个浏览器
         HttpClient client = new HttpClient();
        
         //这个是URL地址,我经过分析51job网站登录后的跳转到的地址,并分析得它在JavaScript里提交的URL的参数,不同网站就自已分析了,这个就是登录后刷新简历的URL地址
         String url = "http://my.51job.com/my/Pop_RefreshResume.php?en=0&ReSumeID=88888888&Read=0&ID=88888888";
        
         //之后再建立一个Post方法请求,提交刷新简历的表单,因为提交的参数较多,所以用Post请求好了
         PostMethod method = new PostMethod(url);
 
         //下面的就是将要提交的表单的数据填入PostMethod对象里面,以name , value 对加入!
         method.addParameter("HPNation", "086");
         method.addParameter("HPCity","020");
         method.addParameter("HPNumber","88888888");
         method.addParameter("FPNation","086");
         method.addParameter("FPCity","020");
         method.addParameter("FPNumber","88888888");
         method.addParameter("FPExtension","000");
         method.addParameter("MPNation","086");
         method.addParameter("Mobile","13888888888");
         method.addParameter("EmailAdd","888@888.com");
         method.addParameter("ReSumeID","88888888");
        
         //这里是建立请求时服务器需要用到的Cookie。
         Cookie cookie = new Cookie(".51job.com","51job","ccry%3D.0%252FZKBaMTmj82%26%7C%26cconfirmkey%3DcpwWgp7FC9FZM%26%7C%26cresumeid%3D88888888%26%7C%26cresumeids88888888d888826%7C8408ilstatus%3D2%26%7C%26cnickname826cenglis8cautologin%3D","/",null,false);
        
         //将设置好的Cookie加入模拟的客户端里。当请求发生时,就会将Cookie写进请求头里了
         client.getState().addCookie(cookie);
         int i=0; 
         //开始死循环
         while(true){
             try{
                 //这里是要求客户端发送一个请求。直接将PostMethod请求出去。
                 client.executeMethod(method);
                
                 //下面是获取返回的结果
                 InputStream in = method.getResponseBodyAsStream();
                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
                 byte[] buff = new byte[1024];
                 int len = -1;
                 while((len=in.read(buff))!=-1){
                     baos.write(buff, 0, len);
                 }
                 String result = new String(baos.toByteArray());
                
                 //释放资源
                 in.close();
                baos.close();
 
                 //在51job里,刷新简历成功的话,会返回一些JavaScript代码,里面有个alert()输出“简历已刷新”的信息的,你分析结果,如果有这句话,则成功刷新了。之后就让线程睡眠1分钟后循环刷新!
                 if(result.indexOf("简历已刷新")!=-1){
                     System.out.println("简历已刷新! " + ++i);
                 }else{
                     System.out.println("刷新失败!");
                 }
                 Thread.sleep(60000);
             }catch(Exception ex){
                 System.out.println("******** Error! ********");
                 try{
                     //出现错误时,再等待20秒后再重新进行刷新。
                    Thread.sleep(20000);
                 }catch(Exception e){
                    System.out.println("******** Thread Error! ********");
                 }
             }
         }
     }
 
}

 我们再来看看,其实很简单,我们来说明一下。HttpClient将很多Http协议底层的东西都封装了,这样很方便使用,如果自已用Socket写的话,还有处理很多信息,Http协议的三次握手等等的操作,很是麻烦。现在用HttpClient就一步到位了。但要注意一下,51job里面的简历刷新是要先登录后才可以进行的,而熟悉Web开发的人员都知道,登录后服务器就会记录下你的Session,而Session也是基于Cookie的,所以 Session ID是以Cookie的方式记录在客户机的,这样每次请求都要将该Cookie发送到服务器验证,这样才可以保证Web的状态。所以,你可以在浏览器里先登录一次。之后找出该网站的Cookie文件,将里面的内容复制出来放上上面代码的Cookie类里面。你也可以用这个HttpClient写一个登录的请求,之后再从ResponseHeader里获取Cookie。至于表单里的信息,就按自已需要填写就行了。就是模拟一个浏览器,将你的简历刷新的表单模拟出来再发送。

分享到:
评论

相关推荐

    jbot,使用Java制作Slack、Facebook和Twitter机器人。.zip

    《使用Java制作Slack、Facebook和Twitter机器人的实践探索》 在信息技术日新月异的今天,社交网络已经成为人们日常生活和工作中不可或缺的一部分。为了更好地利用这些平台,开发者们经常需要创建自动化工具,其中就...

    java 登录验证码制作

    以上就是Java JSP环境下制作登录验证码的基本流程,通过这种方式,我们可以为网站添加一道防线,防止未经授权的登录尝试。但要注意,这只是基础级别的验证码,实际应用中可能需要更复杂的验证码,例如滑动验证码、...

    java开源包4

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包6

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包101

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包9

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包5

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包8

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包10

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包3

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包1

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    Java资源包01

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包2

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包11

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包7

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    2019年毕业设计-解魔方机器人.zip

    辅助控制机械手的子窗口界面,该文件采用纯代码编写,运行主程序自动启动,也可以单独启动。 kociemba.m 根据魔方颜色识别结果,进行解算,返回还原步骤。该文件通过网络端口调用德国数学家Kociemba的解魔方程序...

    servlet验证码制作和过滤器

    验证码是防止恶意自动程序(如机器人)滥用服务的一种安全机制。过滤器则在Servlet处理请求之前和之后进行预处理和后处理,用于实现诸如字符编码转换、权限验证等功能。在这个主题中,我们将深入探讨如何制作Servlet...

    中小企业智能财务云服务机器人.pdf

    这些服务可以通过互联网随时随地访问,并且能够自动更新,无需用户手动维护软件。 2. 会计云平台服务:是一种基于云的服务平台,提供了会计处理的各项功能。用户可以在这个平台上进行账目管理、财务报表制作、凭证...

    制作你自己的爬虫机器人.rar-综合文档

    在IT领域,爬虫机器人(也称为网络爬虫或网页抓取器)是自动化程序,它们遍历互联网,抓取并存储网页信息。这个“制作你自己的爬虫机器人”综合文档可能包含了一系列步骤和指导,教你如何构建一个基础的网络爬虫。...

    vk-sdk-kotlin:用Kotlin编写的非官方VK SDK:制作机器人,使用API

    使用vk-sdk-kotlin,开发者可以创建在VK平台上运行的聊天机器人,这些机器人可以自动回复消息、处理事件、执行特定任务,如自动发布内容、管理群组、进行数据分析等。 5. **多平台支持**: 虽然SDK主要是用Kotlin...

Global site tag (gtag.js) - Google Analytics