Java中关于httpClient的用法总结

Java中关于httpClient的用法总结

httpClient是apache开发的一个用于http传输的工具包,用起来非常方便,封装了底层协议,提供了一些简单可用的api以供调用。

快速开始:

  1. 创建一个http客户端:

    private static CloseableHttpClient client = HttpClients.createDefault();
    
  2. 创建一个httpPost用于模拟http的post请求:

    HttpPost httpPost = new HttpPost("http://localhost:8080/getDetails");
    RequestConfig requestConfig = RequestConfig.custom()
            .setSocketTimeout(1000)
            .setConnectTimeout(1000)
            .build();
    httpPost.setConfig(requestConfig);
    httpPost.addHeader("Content-Type", "application/json");
    //一个实体类,它从字符串中获得内容并填充到实体类中,json代表json字符串
    StringEntity entity = new StringEntity(json,ContentType.APPLICATION_JSON);
    httpPost.setEntity(entity);
    
  3. 创建一个HttpResponse用来接收响应:

    //这里用CloseableHttpResponse而不用HttpResponse是因为前者继承了Closeable接口
    //在后面会调用其继承的close()方法来关闭response
    CloseableHttpResponse response = null;
    
  4. 执行http请求:

    response = client.execute(httpPost);
    
  5. 获得响应数据并处理数据:

    //获得响应状态行
    StatusLine statusLine = response.getStatusLine();
    if (statusLine != null){
        int code = statusLine.getStatusCode();
        //请求成功
        if(code == 200) {
            //这里不用EntityUtils.toString(final HttpEntity entity)方法的原因:
            //官方api强烈建议禁用此方法:除非entity来自受信任的网站并且实体内容长度有限
            //至于为什么这样,本人还没有研究清楚,可能是EntityUtils.toString方法里面
            //直接利用entity.getContent()方法获得inputStream,然后将inputStream关闭,
            //导致如果entity不是repeatable的,则就不能再次访问entity的内容
    //      String rev = EntityUtils.toString(response.getEntity());
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null){
                //读取响应内容
                String rev = JsonUtil.readToString(responseEntity.getContent(),"utf-8");
                //关闭inputStream流
                EntityUtils.consume(responseEntity);
                //将响应转换成json格式
                JSONObject jsonObject = JSON.parseObject(rev);
                if (jsonObject != null && StringUtils.equals(String.valueOf(jsonObject.get("code")), "200")){
                    logger.info("【" + systemId + "】" + "系统应答结果:" + String.valueOf(jsonObject.get("msg")));
                    result = true;
                }else if (jsonObject != null)
                    logger.error("【" + systemId + "】" + "系统应答结果:" + String.valueOf(jsonObject.get("msg")));
            }
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值