调用第三方接口,http的post请求入参格式为json

1.需求:要调用第三方接口的放回数据,入参为json格式,其中最重要的每个接口都需要t第三方传过来token,但是token 的过期时间是十分钟。为了防止一直请求,把token存到缓存(1)存到session (2)存到redis 。根据项目需要,这里采用的是存session。

如果有调用的,去判断session有没有值,并且是否已经过了9分钟,如果是重新获取。

public static String getToken(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession();
        DataShareDto dataShareToken = (DataShareDto) session.getAttribute("dataShareDto");
        if (dataShareToken != null) {
            Calendar c = Calendar.getInstance();
            long now = c.getTimeInMillis();
            c.setTime(dataShareToken.getCreateTime());
            long lastly = c.getTimeInMillis();
            if ((now - lastly) < 540000) {
                return dataShareToken.getToken();
            } else {
                return commonToken(request, response);
            }
        } else {
            return commonToken(request, response);
        }
    }
   public static String commonToken(HttpServletRequest request, HttpServletResponse response) {
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("username", USERNAME);
            jsonObject.put("password", PASSWORD);
            String encoding = "utf-8";
            String body = "";
            CloseableHttpClient client = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(URL);
            StringEntity s = new StringEntity(jsonObject.toString(), "utf-8");
            s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
            httpPost.setEntity(s);
            httpPost.setHeader("Content-type", "application/json");
            httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            CloseableHttpResponse res = client.execute(httpPost);
            HttpEntity entity = res.getEntity();
            if (entity != null) {
                body = EntityUtils.toString(entity, encoding);
            }
            EntityUtils.consume(entity);
            res.close();
            JSONObject strs = JSON.parseObject(body);
            //String.valueOf(JSON.parse(body))
            //json.parse这一步的原因是,返回的json字符创是Unicode编码格式,需要通过json.parse解析成中文格式并h返回
            String code = strs.getString("code");
            if ("01".equals(code)) {
                String data = strs.getString("data");
            //把token存到session里面
                if (StringUtils.isNotEmpty(data)) {
                    HttpSession session = request.getSession();
                    DataShareDto dataShareDto = new DataShareDto();
                    dataShareDto.setToken(data);
                    dataShareDto.setCreateTime(new Date());
                    session.setAttribute("dataShareDto", dataShareDto);
                    return data;
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return "00";
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值