报错信息,原因是接口只能https协议访问,但是https的证书浏览器访问也提示不可信,HttpURLConnection调用就报错了

No subject alternative names matching IP address xxxx found

在这里插入图片描述

解决方法:首先找到HostnameChecker.java的源码,覆盖重写 去验证去掉这个万能方法应该是可以的,不过HttpURLConnection 已经提供了api(setDefaultHostnameVerifier)去重写验证,而且HostnameChecker是jdk 的类,不是普通的jar,项目上jdk版本会有变化,所以jdk的jar最好不要重写覆盖方式,项目的lib下的jar重写覆盖不用考虑这个版本问题
在这里插入图片描述
使用HttpURLConnection 提供了api (setDefaultHostnameVerifier)去掉验证

在这里插入图片描述

HttpsURLConnection调用部分代码记录

 ByteArrayOutputStream byteArrayOutputStream = null;
    InputStream inputStream=null;
    try {

      byte[] data2 = new byte[1024 * 8];
      // 创建URL
      URL url = new URL(pdfAdrr);



      HostnameVerifier hv = new HostnameVerifier() {
        @Override
        public boolean verify(String urlHostName, SSLSession session) {

          return true;
        }
      };
      HttpsURLConnection.setDefaultHostnameVerifier(hv);

      // 创建链接
      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("GET");
      conn.setConnectTimeout(10 * 1000);

      if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
        //连接失败/链接失效/文件不存在
        StringBuffer sb = new StringBuffer();
        sb.append("<response><code>200</code><message>获取pdf报告失败!</message><datainfos>");
        sb.append("调用pdf生成方法失败,文件不存在pdfAdrr:"+pdfAdrr);
        sb.append("</datainfos></response>");
        return sb.toString();
      }
      inputStream = conn.getInputStream();
      byteArrayOutputStream = new ByteArrayOutputStream();
      int len = -1;
      while (-1 != (len = inputStream.read(data2))) {
        byteArrayOutputStream.write(data2, 0, len);
      }

      StringBuffer sb = new StringBuffer();
      sb.append("<response><code>200</code><message>获取pdf报告成功!</message><datainfos>");
      sb.append("<![CDATA[" + Base64.byteArrayToBase64(byteArrayOutputStream.toByteArray()) + "]]>");
      sb.append("</datainfos></response>");
      return sb.toString();
    } finally {
      if(byteArrayOutputStream!=null){
        byteArrayOutputStream.close();
      }
      if (inputStream != null) {
        inputStream.close();
      }


    }
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐