`
hu474676693
  • 浏览: 6330 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

(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() ;
            }
        }

谢谢,欢迎大家 联系 ,大家相互进步!

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    httpClient入门

    在描述中提到的博客链接可能详细介绍了如何设置和使用HttpClient。通常,一个简单的GET请求可以通过以下步骤完成: 1. 创建HttpClient实例,例如使用`HttpClientBuilder`或`HttpClients.custom()`构建。 2. 构建...

    httpclient 最简单 最详细 最入门 教程

    `HttpClient`的使用更加灵活和高效,下面详细介绍其基本操作。 ##### 使用GET方式向后台递交请求 使用`HttpClient`进行GET请求非常直观。首先,需要创建一个`HttpGet`对象,指定请求的URL,然后使用`...

    HttpClient.入门和实战.docx

    HttpClient 入门和实战 HttpClient 是一个基于 HTTP/1.1 协议的客户端编程工具,可以用来发送 HTTP 请求和接收响应。HttpClient 可以用来实现 HTTP 客户端的各种功能,如发送 GET、POST、PUT、DELETE 等请求,上传...

    httpClient4.1入门教程.pdf

    整体而言,本教程深入浅出地介绍了HttpClient 4.1的入门使用方法。它适合那些希望快速掌握HttpClient基本操作的初学者,同时也为那些计划使用HttpClient开发复杂HTTP客户端应用的开发者提供了参考。通过这篇教程,...

    httpclient的入门实例

    这篇博客文章“httpclient的入门实例”可能是介绍如何使用HttpClient库进行基本的HTTP请求,如GET和POST,以及如何处理响应。下面我们将深入探讨HttpClient的基本概念、用法和关键功能。 HttpClient主要提供了以下...

    httpclient技术介绍

    httpclient技术介绍

    比较全的httpclient入门介绍和例子代码

    ### HttpClient入门介绍与实例解析 #### 一、HttpClient概述 HttpClient是Apache Jakarta Commons项目下的一个子项目,提供了高效、功能丰富的HTTP客户端实现。它不仅支持HTTP协议的基本操作,还提供了高级功能,...

    HttpClient介绍和使用文档

    以下是一个使用HttpClient简单读取网页内容的例子: ```java import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; public ...

    httpclient入门

    httpclient入门非常好的资料,新手必备。

    HttpClient入门

    以下是对HttpClient的详细介绍,以及如何开始使用它。 一、HttpClient简介 HttpClient是Apache基金会下的一个开源项目,它提供了一套强大的API来处理HTTP请求和响应。HttpClient支持HTTP/1.1和部分HTTP/2协议,可以...

    使用HttpClient必须的jar包

    在"使用说明.txt"中,通常会详细阐述如何配置和使用这些jar包,包括添加到项目构建路径、初始化HttpClient实例、构造请求、解析响应等内容,对于初学者来说是非常有价值的参考资料。务必仔细阅读并按照指导进行操作...

    httpclient入门必看

    对于初学者来说,理解HttpClient的基本使用和常见问题的解决方法至关重要。 首先,使用HttpClient进行GET方法请求通常涉及以下六个步骤: 1. 创建HttpClient实例。大部分情况下,HttpClient的默认构造函数即可满足...

    httpClient4.1入门教程.

    1. 环境准备:要使用 HttpClient,首先需要在项目中引入对应的依赖库。对于 Maven 项目,可以在 pom.xml 文件中添加 HttpClient 相关的依赖项,通常包括 `httpclient` 和 `httpcore` 两个模块。 2. 几个主要类解释...

    httpclient.jar包下载

    在使用httpclient.jar时,开发者需要注意版本兼容性,因为不同的HttpClient版本可能与不同的Java版本和服务器环境有不同的适配性。此外,理解HttpClient的配置和设置非常重要,这直接影响到其性能和功能。例如,正确...

    Commons-HTTPClient组件介绍与使用

    在使用HttpClient时,你需要下载以下库文件: 1. Commons-HTTPClient组件的主库文件:commons-httpclient-3.1.jar 2. 编码解码支持库:commons-codec-1.3.jar,用于处理编码相关的问题。 3. 日志功能组件:可能需要...

    HttpClientHelper 工具类

    这样确保了在整个应用程序生命周期中,HttpClientHelper只有一个实例被创建和使用。 5. **异常处理**:HttpClientHelper 应该包含了适当的错误处理机制,如捕获网络异常、解析异常等,以确保在出现问题时能够给出...

    HttpClient 调用WebService示例

    在本文中,我们将深入探讨如何使用HttpClient调用WebService。 首先,调用WebService通常涉及SOAP(Simple Object Access Protocol)或RESTful API。HttpClient可以处理这两种类型的Web服务。在本示例中,我们假设...

    httpclient 获取技术博客列表

    描述中提到的“博文链接:https://change-jeans.iteye.com/blog/2222052”,这可能是一个具体的博客文章地址,该文章详细介绍了如何使用HttpClient进行操作。在这个链接中,作者可能会解释如何配置HttpClient,建立...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    《JAVA中使用HttpClient:commons-httpclient-3.0.jar详解》 在JAVA开发中,进行HTTP请求时,Apache的HttpClient库是一个不可或缺的工具。本文将深入解析`commons-httpclient-3.0.jar`,它是HttpClient的一个重要...

    HttpClient 3.x to HttpComponents HttpClient 4.x

    例如,在HttpClient 3.x中,代码可能会使用`***mons.httpclient.HttpClient`类和`***mons.httpclient.methods.GetMethod`等,而在4.x版本中,这些都被新的API所替代。程序员需要熟悉`org.apache....

Global site tag (gtag.js) - Google Analytics