美文网首页
HttpClient 学习

HttpClient 学习

作者: 大炮对着虫子 | 来源:发表于2018-08-20 20:36 被阅读3次
    HttpClient 简介

    HTTP 协议应该是Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

    HTTP协议的主要特点可概括如下:
    1.支持客户/服务器模式。
    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。
    由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    使用方法

    通过Maven 导出需要的jar包:

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.3</version>
    </dependency>
      
      <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.4.6</version>
    </dependency>
      <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
      <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.5</version>
            </dependency>
    
    1. 创建HttpClient对象,最新版的httpClient使用实现类的是closeableHTTPClient,以前的default作废了。

    2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

    3. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。

    4. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

    5. 释放连接。无论执行方法是否成功,都必须释放连接

    public class HttpClientExample {
        
        ////    http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.4.255.255
        String url="ip.taobao.com/service/getIpInfo.php";
        public static void getMethod(String url,String ip)
        {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("ip", ip));
            
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            InputStream is = null;
            String str;
            try {
                str = EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));
                // 创建Get请求
                HttpGet httpPost = new HttpGet(url + "?" + str);
                // 执行Get请求,
                response = httpClient.execute(httpPost);
                // 得到响应体
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    is = entity.getContent();
                    // 转换为字节输入流
                    BufferedReader br = new BufferedReader(new InputStreamReader(is, Consts.UTF_8));
                    StringBuilder sb = new StringBuilder();
                    String body = null;
                    while ((body = br.readLine()) != null) {
                        sb.append(body);
                    }
                    //Map mapTypes = JSON.parseObject(sb.toString());
                    
                    System.out.println(sb);
                //  System.out.println(mapTypes.get("code"));
                }
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                // 关闭输入流,释放资源
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                    }
                }
                // 消耗实体内容
                if (response != null) {
                    try {
                        response.close();
                    } catch (IOException e) {
                    }
                }
                // 关闭相应 丢弃http连接
                if (httpClient != null) {
                    try {
                        httpClient.close();
                    } catch (IOException e) {
                    }
                }
            }
            
        }
        public static void main(String args[]) throws IOException{
        //  http://ip.taobao.com/service/getIpInfo.php?ip=118.187.25.137
            String ip="118.187.25.137";
            HttpClientExample.getMethod("http://ip.taobao.com/service/getIpInfo.php", ip); 
        }
    }
    
    
    {"code":0,"data":{"ip":"118.187.25.137","country":"中国","area":"","region":"北京","city":"北
    京","county":"XX","isp":"电
    信","country_id":"CN","area_id":"","region_id":"110000","city_id":"110100","county_id":"xx","isp_id":"100017"}}
    
    

    相关文章

      网友评论

          本文标题:HttpClient 学习

          本文链接:https://www.haomeiwen.com/subject/gkqriftx.html