(HttpClient技術)(HttpClient入門)HttpClient使用詳細介紹

1 前言

        網絡自動化操作,已經是網絡發展中的一個重要趨勢,很多複雜繁瑣的操作,手動完成,得花費大量的時間,所以,網絡自動化操作,就變得越來越普遍,越來越重要。很多應用,都可以使用網絡自動化工具去完成,比如批量登陸簽到,批量刷票,批量註冊郵箱,批量查詢用戶餘額等,那麼網絡自動化,在java中,應該用什麼工具去開發呢,那麼首先想到的應該就是HttpClient了,它是網絡自動化操作方面,使用起來,實在是太方便了,應用也及其廣泛。其他工具,比如HtmlUnit,雖然也有一定的使用,但是比起HttpClient來,實在差的太遠了,那麼HttpClient到底是什麼,到底應該怎麼使用呢,我在這裏做一個介紹吧.

2 HttpClient介紹

        HttpClient 是 Apache Jakarta Common 下的子項目,它封裝了java中URLConnection工具,並且將URLConnection的方法使用,都做了優化,更好的兼容了Http的訪問和使用,更好的管理了緩存和Cookies,並且兼容了所有的Http訪問的方法,使得,所有的網站,都可以使用這個工具來訪問,現在HttpClient最新版本爲 4.4,但是最經典的版本是3.x,當然4.3以上的版本,也是相當好用的。
        HttpClient 中,兼容了網絡中常用的兩種請求方法,分別是get和post,這兩種方法,在3.x和4.x中的方法名,都是不一樣的(當然,4.x封裝的更爲完全),但並不是說4.x就是最好用的版本,其實,3.x也有自己獨到的一面,在對ssl處理方面,就比4.x,好用的多了。
        簡單介紹就說這麼多了,下面就對,HttpClient的使用步驟,作個介紹;

3 HttpClient需要的jar包

        HttpClint版本不一樣,所需要的jar包也是不一樣的,這裏就簡單介紹一下3.x和4.x所需要的jar包:

        HttpClient3.x需要的jar包:
        commons-httpclient-3.1.jar,commons-codec.jar,commons-io-1.4.jar,commons-lang-2.4.jar,commons-logging-1.1.jar,log4j-1.2.16.jar
        HttpClient4.x需要的jar包:
        httpclient-4.1.1.jar,httpclient-cache-4.1.1.jar,httpcore-4.1.jar,httpmime-4.1.1.jar,commons-logging-1.0.jar,log4j-1.2.16.jar
        後面,我會提供一個專門的 地址給大家,方面下載;

4 HttpClient開發步驟

        開發步驟,大體如下:
        a 首先創建HttpClient實例
        b 創建請求的方法,get請求創建get方法,post請求創建post方法
        c 對創建的方法設置請求頭(Header)setRequestHeader(setHeader)
        d 使用httpClient實例,請求方法httpClient.executeMethod(g1)(httpClient.execute(g1))
        e 查看請求狀態,是否成功,(g1.getStatusCode() ),200表示請求成功
        f 得到請求後的數據,如請求後的網頁,請求後的cookies
        g 釋放鏈接,做其他處理;

5 與HttpClient配套的抓包工具

        HttpClient是無法查看數據包的,如果我們要模擬網頁行爲,我們必須知道,網頁都做所做了什麼操作,傳了什麼參數,用了什麼方法,那麼,就只能使用抓包工具了,下面介紹幾種與之相配用的工具:
        首先,最好用,最廣泛的,當然是HttpWatch了,這個兼容ie,使用起來,也很方便
        然後,就是Fiddler,這個工具,使用人數也很多,他能兼容更多的瀏覽器
        其他,其他的工具也多種多樣,我們可以根據自己的需求,選擇適合的工具

6 HttpClient開發實例

        HttpClient有3.x和4.x等版本可以使用,這裏上傳一些例子,僅供學習和參考;
        HttpClient3.x的163郵箱登陸的例子,僅供大家參考:

    HttpClient httpClient =  new HttpClient();   
    httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);
        httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);

        httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); 

        if(ip!=null && !ip.equals("")){
            httpClient.getHostConfiguration().setProxy(ip, port) ;
        }

        GetMethod g1 = null;
        GetMethod g2 = null;
        PostMethod g3 = null;
        GetMethod g4 = null;
        GetMethod g5 = null;
        GetMethod g6 = null;
        GetMethod g67 = null;
        //TBlog 
        try {
            g1 = new GetMethod("http://mail.163.com/") ;

            g1.setRequestHeader("Accept", "text/html, application/xhtml+xml, */*") ;
            g1.setRequestHeader("Accept-Language", "zh-CN") ;
            g1.setRequestHeader("Connection", "Keep-Alive") ;
            g1.setRequestHeader("Host", "mail.163.com") ;
            //g1.setRequestHeader("Referer", "http://chuangshi.qq.com/") ;
            g1.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)") ;


            //g1.setRequestHeader("Cookie", cookies) ;

            httpClient.executeMethod(g1) ;
            String sg1 = g1.getResponseBodyAsString() ;
            //System.out.println(sg1);

            if(g1.getStatusCode() == 200 ){





                String cookies = "starttime="+System.currentTimeMillis()+"; logType=; nts_mail_user="+username+":-1:1; df=mail163_letter" ;
                String urls = "https://mail.163.com/entry/cgi/ntesdoor?df=" +
                        "mail163_letter" +
                        "&from=web" +
                        "&funcid=loginone" +
                        "&iframe=1" +
                        "&language=-1" +
                        "&passtype=1" +
                        "&product=mail163" +
                        "&net=c&style=-1" +
                        "&race=45_51_179_bj" +
                        "&uid=" +username;
                g3 = new PostMethod(urls) ;

                g3.setRequestHeader("Accept", "text/html, application/xhtml+xml, */*") ;
                g3.setRequestHeader("Accept-Language", "zh-CN") ;
                g3.setRequestHeader("Connection", "Keep-Alive") ;
                g3.setRequestHeader("Host", "mail.163.com") ;
                g3.setRequestHeader("Referer", "http://mail.163.com/") ;
                g3.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)") ;                   
                g3.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8") ;
                g3.setRequestHeader("Cookie", cookies) ;
                NameValuePair[] data = {
                        new NameValuePair("password",secret),
                        new NameValuePair("savelogin","0"),
                        new NameValuePair("url2","http://mail.163.com/errorpage/error163.htm"),
                        new NameValuePair("username",username)
                };
                g3.setRequestBody(data);
                g3.setRequestHeader("Content-Length", g3.getRequestEntity().getContentLength()+"") ;


                httpClient.executeMethod(g3) ;
                String sg3 = g3.getResponseBodyAsString() ;


                System.out.println(g3.getStatusCode()) ;

                if(g3.getStatusCode()==200  && sg3.indexOf("http://mail.163.com/js6/main.jsp")!=-1){

                    String cookiessession = "" ;
                    Cookie[] cookiesssession = httpClient.getState().getCookies();
                    for (Cookie c : cookiesssession) {
                        cookiessession += c.toString() + ";" ;

                    }
                    System.out.println("cookiessession:" + cookiessession);



                    String urlmain = "" ;
                    sg3 = sg3.substring(sg3.indexOf("http://mail.163.com/js6/main.jsp")) ;
                    urlmain = sg3.substring(0, sg3.indexOf("\"")) ;

                    if(urlmain.indexOf("sid=")!=-1){
                        String newurlmain = urlmain.substring(urlmain.indexOf("sid=")+4) ;
                        if(newurlmain.indexOf("&")!=-1){
                            sid = newurlmain.substring(0, newurlmain.indexOf("&")) ;
                        }
                    }

                    g1 = new GetMethod(urlmain) ;

                    g1.setRequestHeader("Accept", "text/html, application/xhtml+xml, */*") ;
                    g1.setRequestHeader("Accept-Language", "zh-CN") ;
                    g1.setRequestHeader("Connection", "Keep-Alive") ;
                    g1.setRequestHeader("Host", "mail.163.com") ;
                    //g1.setRequestHeader("Referer", "http://chuangshi.qq.com/") ;
                    g1.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)") ;


                    g1.setRequestHeader("Cookie", cookiessession+cookies) ;

                    httpClient.executeMethod(g1) ;
                    String sg11 = g1.getResponseBodyAsString() ;
                    //System.out.println(sg11) ;
                    if(g1.getStatusCode()==200 && sg11.indexOf("<title>網易郵箱")!=-1 && sg11.indexOf("?ssid=")!=-1){
                        String cookiessession1 = "" ;
                        Cookie[] cookiesssession1 = httpClient.getState().getCookies();
                        for (Cookie c : cookiesssession1) {
                            cookiessession1 += c.toString() + ";" ;
                            if(c.toString().indexOf("NTES_SESS=")!=-1){
                                NTES_SESS = c.toString().replace("NTES_SESS=", "") ;
                            }
                            if(c.toString().indexOf("Coremail=")!=-1){
                                Coremail = c.toString().replace("Coremail=", "") ;
                            }
                        }
                        System.out.println("cookiessession:" + cookiessession1);

                        sg11 = sg11.substring(sg11.indexOf("?ssid=")+6) ;
                        ssid = sg11.substring(0, sg11.indexOf("'"));


                        String cossss = cookiessession1 + cookies ;
                        re = true ;
                        cookiess = cossss ;

                    }else{
                        System.out.println("2");
                        errorinfo = "登錄失敗,進入main.jsp失敗" ;
                    }

                }else{
                    System.out.println("2");
                    errorinfo = "登錄失敗,密碼或者賬號有誤" ;
                }
            }else{
                System.out.println("1");
                errorinfo = "登錄失敗,無法訪問163網站,請換ip" ;
            }

        }catch(Exception e){
            System.out.println(e.toString());
            //e.printStackTrace() ;
        }finally{
            if(g1!=null){
                g1.releaseConnection() ;
            }
            if(g2!=null){
                g2.releaseConnection() ;
            }
            if(g3!=null){
                g3.releaseConnection() ;
            }
            if(g4!=null){
                g4.releaseConnection() ;
            }
            if(g5!=null){
                g5.releaseConnection() ;
            }

            if(g67!=null){
                g67.releaseConnection() ;
            }
        }

謝謝,歡迎大家 聯繫 ,大家相互進步!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章