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

        }

    }

}

posted @ 2018-11-19 11:29  JackLU刘先生  阅读(280)  评论(0编辑  收藏  举报