https开头的URL接口无法获取数据并报错: PKIX path building failed

大概介绍:php语言写的接口,通过get或post方式获取里面的数据。但是是以https开头的URL

原因:https网址向客户的要证书

解决方案:跳过证书验证部分

package com.scheduler;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
//该类屏蔽了https连接需要加密证书的验证
public class GetTextByUrl {

    public static void main(String[] args) {
        HostnameVerifier hv = new HostnameVerifier() {
            public boolean verify(String urlHostName, SSLSession session) {
                System.out.println("Warning: URL Host: " + urlHostName + " vs. "
                        + session.getPeerHost());
                return true;
            }
        };
        StringBuffer msg = new StringBuffer();
        try {
            URL url = new URL("https://www.ddsdd.php");
            trustAllHttpsCertificates();
            HttpsURLConnection.setDefaultHostnameVerifier(hv);
            URLConnection connection = url.openConnection();
            connection.connect();
            BufferedReader in = new BufferedReader((new InputStreamReader(connection.getInputStream())));
            String line;

            while ((line = in.readLine()) != null) {
                msg.append(line);
            }
            String msgString = msg.toString();
            String fannlyMsg = msgString.substring(msgString.indexOf("!") + 1);
            System.out.println(msgString);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void trustAllHttpsCertificates() throws Exception {
        javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
        javax.net.ssl.TrustManager tm = new miTM();
        trustAllCerts[0] = tm;
        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
                .getInstance("SSL");
        sc.init(null, trustAllCerts, null);
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
                .getSocketFactory());
    }

    static class miTM implements javax.net.ssl.TrustManager,
            javax.net.ssl.X509TrustManager {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public boolean isServerTrusted(
                java.security.cert.X509Certificate[] certs) {
            return true;
        }

        public boolean isClientTrusted(
                java.security.cert.X509Certificate[] certs) {
            return true;
        }

        public void checkServerTrusted(
                java.security.cert.X509Certificate[] certs, String authType)
                throws java.security.cert.CertificateException {
            return;
        }

        public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs, String authType)
                throws java.security.cert.CertificateException {
            return;
        }
    }

}

  

原文地址:https://www.cnblogs.com/xiaotieblog/p/8337288.html

时间: 2024-08-13 22:57:45

https开头的URL接口无法获取数据并报错: PKIX path building failed的相关文章

【fastweixin框架教程3】JAVA进行HTTPS网站访问,PKIX path building failed解决方法

上几篇文章我们谈到fastweixin使用问题和修改. 今天的问题就是使用JAVA访问HTTPS网站时候经常出现javax.net.ssl.SSLHandshakeException javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderEx

HTTPS连接时出现PKIX path building failed问题

第一种方法:进行安全证书的下载及导入-----------传统办法,优点是安全性高,缺点是网站若更换证书,还得重新下载和导入,不够灵活 sudo keytool -import -noprompt -trustcacerts -alias CTSite -file /Users/zhanghao/Desktop/sslvpn.cer -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib

Java生成证书工具类 InstallCert.java解决httpClient访问https出错:PKIX path building failed

编译:javac InstallCert.java运行:java InstallCert 要访问的网址 最后面会输出: Enter certificate to add to trusted keystore or 'q' to quit: [1] 输入1,然后直接回车,会在相应的目录下产生一个名为'jssecacerts'的证书.将证书copy到$JAVA_HOME/jre/lib/security目录下 InstallCert.java /* * Copyright 2006 Sun Mic

Docker 获取容器镜像报错

Dokcer 获取容器镜像报错 [[email protected] ~]# docker pull nginxUsing default tag: latestTrying to pull repository docker.io/library/nginx ... Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout excee

关于socket模块获取ip失败报错

问题:socket模块获取ip失败报错 In [64]: import socket In [71]: socket.gethostname() Out[71]: 'web01' In [72]: host_name = socket.gethostname() In [73]: socket.gethostbyname(host_name) --------------------------------------------------------------------------- g

数据插入报错Incorrect integer value: '' for column

鄙人不才,在操作数据库存储的时候碰见这样的问题.执行sql语句批量插入数据的时候报错 ? Incorrect integer value: '' for column 'zhuticengshu' at row 1 我的数据库表设计十分的简单:说白了,也就是记录下,以后避免这样的错误发生其中id是自增id,其余的字段都是非主键,执行的时候一直报错 Incorrect integer value: '' for column 'zhuticengshu' at row 1 问题测试 首先将后台打印

Xtrabackup恢复mysql数据时候报错:Original data directory is not empty!

使用Xtrabackup恢复mysql数据时候报错:Original data directory is not empty! at /usr/bin/innobackupex line 568. 网上普遍只说了引起这种想象的两种原因,还有第三种原因是我遇到的: 1.恢复备份文件要保证mysql的data目录为空,否则会报错,解决办法:  # /etc/init.d/mysqld stop # cd /usr/local/mysql # cp -rf data{,.bak} # rm -rf .

Jsoncpp写“鱘”的json数据,报错。

最近在用Json::FastWriter生成json数据时,发现一个问题.含有"鱘"字的json字段会多出一个斜杠,不知道是不是编码的问题. C++要使用JSON来解析数据,一般采用jsoncpp. 网站:http://sourceforge.net/projects/jsoncpp/ 经过json校验http://jsonlint.com/,报错 很是郁闷.现在只能从生成的字符串想办法了. 遍历生成的字符串,删除"\". 生成json数据成功! Jsoncpp写&

数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题

数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题 2个解决方法: 1.临时修改:mysql>set global max_allowed_packet=524288000;修改 #512M 2.修改my.cnf,需重启mysql. 在 [MySQLd] 部分添加一句(如果存在,调整其值就可以): max_allowed_packet=10M