zoukankan      html  css  js  c++  java
  • HttpClient简述

    HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。示例:发送Post/Get请求接口。

    依赖包

    <dependency>

                <groupId>org.apache.httpcomponents</groupId>

                <artifactId>httpclient</artifactId>

                <version>4.3.6</version>

            </dependency>

            <dependency>

                <groupId>org.apache.httpcomponents</groupId>

                <artifactId>httpclient-cache</artifactId>

                <version>4.3.6</version>

            </dependency>

            <dependency>

                <groupId>org.apache.httpcomponents</groupId>

                <artifactId>httpmime</artifactId>

                <version>4.3.6</version>

            </dependency>

    代码示例:

    HttpClient连接池

    /**

     * http连接池

     * Created by liujia68 on 2018/11/15

     */

    public class HttpClientUtils {

     

        private static PoolingHttpClientConnectionManager connectionManager;//连接池管理类

        private static HttpClientBuilder httpBuilder;

        static RequestConfig requestConfig;

        private static int MAXCONNECTION = 10;

        private static int DEFAULTMAXCONNECTION = 5;

        //static String IP = "cnivi.com.cn";

        //private static int PORT = 80;

        static String IP = "172.28.91.145";

        private static int PORT = 8080;

     

        static {

            //设置http的状态参数

            requestConfig = RequestConfig.custom()

                    .setConnectTimeout(5000)//一、连接超时:connectionTimeout-->指的是连接一个url的连接等待时间

                    .setSocketTimeout(5000)// 二、读取数据超时:SocketTimeout-->指的是连接上一个url,获取response的返回等待时间

                    .setConnectionRequestTimeout(5000)//三、从连接池获取连接的超时,如果连接池里连接都被用了,且超过这个时间,会抛出超时异常

                    .build();

     

            HttpHost target = new HttpHost(IP, PORT);

            connectionManager = new PoolingHttpClientConnectionManager();

            connectionManager.setMaxTotal(MAXCONNECTION);//客户端总并行链接最大数

            connectionManager.setDefaultMaxPerRoute(DEFAULTMAXCONNECTION);//每个主机的最大并行链接数

            connectionManager.setMaxPerRoute(new HttpRoute(target), 20);///设置到每个路由的最大连接数

            httpBuilder = HttpClients.custom();

            httpBuilder.setConnectionManager(connectionManager);

        }

     

        static CloseableHttpClient getConnection() {

            CloseableHttpClient httpClient = httpBuilder.build();

            return httpClient;

        }

     

        static void dealResult(CloseableHttpResponse response) {

            if (response.getStatusLine().getStatusCode() == 200) {

                HttpEntity entity = response.getEntity();

                String message = null;

                try {

                    message = EntityUtils.toString(entity, "utf-8");

                } catch (IOException e) {

                    e.printStackTrace();

                }

                System.out.println(message);

            } else {

                System.out.println("请求失败");

            }

        }

    }

     

    测试类

    public class test {

        private static void testPost() throws Exception{

            CloseableHttpClient client = getConnection();

     

            //URL+入参requestParam

            URIBuilder uriBuilder = new URIBuilder("http://www.sogou.com/web");

            uriBuilder.addParameter("query","花千骨");

     

            //requestBody

            List<NameValuePair> formparams = new ArrayList<NameValuePair>();

            formparams.add(new BasicNameValuePair("account", ""));

            formparams.add(new BasicNameValuePair("password", ""));

            HttpEntity reqEntity = new UrlEncodedFormEntity(formparams, "utf-8");

     

            HttpPost post = new HttpPost(uriBuilder.build());//URL+入参requestParam

            post.setEntity(reqEntity); //requestBody

            post.setConfig(requestConfig);

     

            CloseableHttpResponse response = client.execute(post);

            dealResult(response);

     

            response.close();

            client.close();

        }

     

     

        private static void testGet(){

     

            try (CloseableHttpClient httpClient = getConnection()){

                //URL+入参requestParam

                URIBuilder uriBuilder = new URIBuilder("http://172.28.91.145:8080/bp-query-service");

                uriBuilder.addParameter("sid","gx");

                uriBuilder.addParameter("curTime","20181115");

                uriBuilder.addParameter("queryType","TUV");

                uriBuilder.addParameter("dataRule","byTotal");

                uriBuilder.addParameter("appid","1");

                uriBuilder.addParameter("clientid","1");

                uriBuilder.addParameter("conditionTabs","");

     

                HttpGet httpget = new HttpGet(uriBuilder.build());//URL+入参requestParam

     

                httpget.setConfig(requestConfig);

     

                CloseableHttpResponse response = httpClient.execute(httpget);

                dealResult(response);

     

                response.close();

            } catch (ClientProtocolException e) {

                e.printStackTrace();

            } catch (URISyntaxException e) {

                e.printStackTrace();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

  • 相关阅读:
    第三次作业
    读大道至简第三章有感
    AlphaMobileControls介绍
    wince下GetManifestResourceStream得到的Stream是null的解决
    Wince下实现ImageButton
    windows phone 8的新特性
    没有开发者账号,如何解锁wp8设备
    windows phone8手机玩玩
    windows phone7开发环境配置错误
    如何解决office2007每次打开都要正在配置
  • 原文地址:https://www.cnblogs.com/csuliujia/p/9982165.html
Copyright © 2011-2022 走看看