<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-31  評論-257  文章-0  trackbacks-0
          真的很久很久沒有寫過文章了,唉,慚愧啊!寒暄的說話就不多說了,直入主題。有人問過我,如何制作一些論壇的自動發言機器人?我說,這很簡單啊,(如果沒有圖片驗證碼的話!)在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]


    posted on 2008-07-29 13:09 姜大叔 閱讀(1736) 評論(2)  編輯  收藏 所屬分類: Java

    評論:
    # re: Java制作自動訪問網站機器人! 2014-12-20 17:33 | 嗖嗖嗖
    嗖嗖嗖  回復  更多評論
      
    # re: Java制作自動訪問網站機器人! 2014-12-20 17:34 | 嗖嗖嗖
    你好嗎?
      回復  更多評論
      
    主站蜘蛛池模板: 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 99热精品在线免费观看| 亚洲一区二区三区自拍公司| 黄色网址大全免费| 免费夜色污私人影院在线观看| 亚洲精品精华液一区二区| 香蕉视频在线观看免费国产婷婷 | 99久久精品国产亚洲| 99在线观看免费视频| 亚洲系列国产精品制服丝袜第| 性色午夜视频免费男人的天堂 | 成人免费无遮挡无码黄漫视频| 亚洲综合无码一区二区痴汉| 午夜男人一级毛片免费 | 亚洲成a人片在线观看中文!!! | 久久久久久亚洲AV无码专区| 97av免费视频| 亚洲性无码AV中文字幕| 国产在线播放免费| 一个人看的www视频免费在线观看| 久久久久国产亚洲AV麻豆| 日韩电影免费在线观看中文字幕| 亚洲综合国产精品| 无码人妻久久一区二区三区免费丨| 国产.亚洲.欧洲在线| 国产精品jizz在线观看免费| a级毛片免费网站| 青青草原精品国产亚洲av| 无码永久免费AV网站| 一级毛片完整版免费播放一区| 亚洲成A∨人片在线观看不卡| 久久久久久精品成人免费图片| 亚洲精品理论电影在线观看| 狠狠亚洲狠狠欧洲2019| 国产91色综合久久免费| 国产亚洲漂亮白嫩美女在线 | 亚洲欧洲日韩极速播放| 亚洲国产日韩成人综合天堂| 91视频免费网址| 青娱乐在线视频免费观看| 亚洲无删减国产精品一区|