专栏首页chenchenchen通过RestTemplate设置header&body,绕过证书验证,并获取返回的header&body

通过RestTemplate设置header&body,绕过证书验证,并获取返回的header&body

背景

使用HttpClients请求外部接口

  @Test
  public void test(){

    try{

      // 使用httpClient请求

      // 请求路径
      String url = "localhost:8080/user/info";

      // 请求头
      Map headerMap = new HashMap();
      headerMap.put("Content-Type", "application/json;chartset=UTF-8");

      // 请求体
      Map body = new HashMap();
      body.put("phone",phone);
      String requstString = JSONObject.toJSONString(body);

      HttpConfig httpConfig = HttpConfigUtil.getHttpConfigForJson(
              headerMap, requstString,
              url,
              700, "UTF-8");
      String result = com.aspire.mall.common.httpclient.HttpClientUtil.post(httpConfig);

      System.out.println("查询用户信息接口返回result:"+result);
      JSONObject jsonObject = JSON.parseObject(result);
      JSONArray subPhoneInfoArray = jsonObject.getJSONObject("Body").getJSONArray("subphonelist");
      for(int i = 0 ;i<subPhoneInfoArray.size();i++){
        JSONObject subPhoneInfo = subPhoneInfoArray.getJSONObject(i);
        subPhones.add(subPhoneInfo.getString("subphone"));
      }

      System.out.println("查询用户信息接口返回subPhones:"+ String.join(",",subPhones));

    }catch (Exception e){
      e.printStackTrace();
    }

  }

但是报缺少安全证书:unable to find valid certification path to requested target

用以下办法能够暂时解决:请求HTTPS接口提示缺少安全证书

但是切换环境证书需要重新生成,不是办法。

使用RestTemplate请求

  @Test
  public void test(){

    try{

      String url = "localhost:8080/user/info";

      // 请求体
      Map body = new HashMap();
      body.put("phone",phone);
      String requstString = JSONObject.toJSONString(body);

      // 请求头
      HttpHeaders headers = new HttpHeaders();
      headers.add("content-type", "application/json;chartset=UTF-8");

      // 请求
      HttpEntity<String> requst = new HttpEntity<>(requstString, headers);


      // 使用RestTemplate请求

      RestTemplate restTemplateHttps = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());
      ResponseEntity<JSONObject> responseBody = restTemplateHttps.postForEntity(url, requst, JSONObject.class);

      JSONObject httpBody = responseBody.getBody();
      System.out.println("接口返回参数:"+httpBody);

      List<String> subPhones = new ArrayList<>();
      JSONArray subPhoneInfoArray = httpBody.getJSONObject("Body").getJSONArray("subphonelist");
      for(int i = 0 ;i<subPhoneInfoArray.size();i++){
        JSONObject subPhoneInfo = subPhoneInfoArray.getJSONObject(i);
        subPhones.add(subPhoneInfo.getString("subphone"));
      }

      System.out.println("查询用户信息接口返回subPhones:"+ String.join(",",subPhones));

    }catch (Exception e){
      e.printStackTrace();
    }

  }

参考:

RestTemplate实现http和https方式的远程调用:https://blog.csdn.net/qq_40950903/article/details/108647457

RestTemplate 中设置 header 以及使用 HTTP 基本认证的方法:https://blog.csdn.net/HeatDeath/article/details/79449607

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring3 RestTemplate

    RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpCo...

    HLee
  • 180815-Spring之RestTemplate中级使用篇

    前面一篇介绍了如何使用RestTemplate发起post和get请求,然而也只能满足一些基本的场景,对于一些特殊的如需要设置请求头,添加认证信息等场景,却没有...

    一灰灰blog
  • 一起学 Spring 之 RestTemplate

    在 Java 服务端开发领域里,Spring 是绕不开的话题,尤其是现在微服务概念盛行,Spring Boot 的出现更是给 Spring 注入了新的活力,除此...

    闻人的技术博客
  • Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)

    RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的...

    Java_老男孩
  • 微服务的用户认证与授权杂谈(下)

    在微服务的用户认证与授权杂谈(上)一文中简单介绍了微服务下常见的几种认证授权方案,并且使用JWT编写了一个极简demo来模拟Token的颁发及校验。而本文的目的...

    端碗吹水
  • iOS开发之CFHttpMessageRef的那些坑

    forrestlin
  • PHP使用CURL实现下载文件功能示例

    本文实例讲述了PHP使用CURL实现下载文件功能。分享给大家供大家参考,具体如下:

    砸漏
  • Spring之RestTemplate中级使用篇

    前面一篇介绍了如何使用RestTemplate发起post和get请求,然而也只能满足一些基本的场景,对于一些特殊的如需要设置请求头,添加认证信息等场景,却没有...

    一灰灰blog
  • 浅谈 php 采用curl 函数库获取网页 cookie 和 带着cookie去访问 网页的方法!!!!

    由于近段时间帮朋友开发一个能够查询正方教务系统的微信公众平台号。有所收获。这里总结下个人经验。 开讲前,先吐槽一下新浪云服务器,一个程序里的   同一个函数  ...

    林冠宏-指尖下的幽灵
  • CRLF注入(响应截断)挖掘技巧及实战案例全汇总

    CRLF是CR和LF两个字符的拼接,它们分别代表”回车+换行”(\r\n)“,全称为Carriage Return/Line Feed”,十六进制编码分别为0...

    Jayway
  • HttpClient工具类

    earthchen
  • Spring Boot(三):RestTemplate提交表单数据的三种方法

    在REST接口的设计中,利用RestTemplate进行接口测试是种常见的方法,但在使用过程中,由于其方法参数众多,很多同学又混淆了表单提交与Payload提交...

    业余草
  • 使用 RestTemplate 进行第三方Rest服务调用

    RestTemplate 是 Spring 提供的一个调用 Restful 服务的抽象层,它简化的同 Restful 服务的通信方式,隐藏了不必要的一些细节,让...

    码农小胖哥
  • 爬虫篇|不会抓包,谈何爬虫(七)

    所谓的http代理,其实就是代理客户机的http访问,主要代理浏览器访问页面。 代理服务器是介于浏览器和web服务器之间的一台服务器,有了它之后,浏览器不是直...

    润森
  • RestTemplate学习

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

  • 精讲RestTemplate第4篇-POST请求方法使用详解

    在上一节为大家介绍了RestTemplate的GET请求的两个方法:getForObject()和getForEntity()。其实POST请求方法和GET请求...

    字母哥博客
  • Fiddler Everywhere之AutoResponder功能详解

    先了解一下Fiddler Everywhere的基本用法,然后再看一下它的AutoResponder功能。

    小博测试成长之路
  • spring boot实现超轻量级网关(反向代理、转发)

    在我们的rest服务中,需要暴露一个中间件的接口给用户,但是需要经过rest服务的认证,这是典型的网关使用场景。可以引入网关组件来搞定,但是引入zuul等中间件...

    JadePeng
  • Spring Data REST 与 Spring RestTemplate 实战详解

    这篇分为两部分内容进行介绍(Spring Data REST 和 Spring RestTemplate)。我之前有一篇文章完整的介绍了 HTTP 协议的内容,...

    CSDN技术头条

扫码关注云+社区

领取腾讯云代金券