自动访问网站机器人 java

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

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

 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           // 开始死循环
42           while ( true ){
43               try {
44                   // 这里是要求客户端发送一个请求。直接将PostMethod请求出去。
45                  client.executeMethod(method);
46                 
47                   // 下面是获取返回的结果
48                  InputStream in  =  method.getResponseBodyAsStream();
49                  ByteArrayOutputStream baos  =   new  ByteArrayOutputStream();
50                   byte [] buff  =   new   byte [ 1024 ];
51                   int  len  =   - 1 ;
52                   while ((len = in.read(buff)) !=- 1 ){
53                      baos.write(buff,  0 , len);
54                  }
55                  String result  =   new  String(baos.toByteArray());
56                 
57                   // 释放资源
58                  in.close();
59                  baos.close();
60 
61                   // 在51job里,刷新简历成功的话,会返回一些JavaScript代码,里面有个alert()输出“简历已刷新”的信息的,你分析结果,如果有这句话,则成功刷新了。之后就让线程睡眠1分钟后循环刷新!
62                   if (result.indexOf( " 简历已刷新 " ) !=- 1 ){
63                      System.out.println( " 简历已刷新!  "   +   ++ i);
64                  } else {
65                      System.out.println( " 刷新失败! " );
66                  }
67                  Thread.sleep( 60000 );
68              } catch (Exception ex){
69                  System.out.println( " ******** Error! ******** " );
70                   try {
71                       // 出现错误时,再等待20秒后再重新进行刷新。
72                      Thread.sleep( 20000 );
73                  } catch (Exception e){
74                      System.out.println( " ******** Thread Error! ******** " );
75                  }
76              }
77          }
78      }
79 
80  }



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

在下面,我给出一本电子书给大家下载参考:《Jakarta Commons Cookbook.chm》
[down=attachments/month_0803/020083401424.chm]点击下载此文件[/down

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值