异常关键词:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

public static void main(String[] args) {
        HttpURLConnection connection = null;
        try {
            String url2 = "http://www.***.com/4f913bb5927_3864.pdf";
            URL url = new URL(url2);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            //设置超时间为3秒
            conn.setConnectTimeout(3*1000);
            //得到输入流
            InputStream inputStream = conn.getInputStream();
            //获取自己数组
            byte[] getData = readInputStream(inputStream);
            //文件保存位置
            File saveDir = new File("K:\\home\\q\\");
            if(!saveDir.exists()){
                saveDir.mkdir();
            String fileName = "123.pdf";
            File file = new File(saveDir+File.separator+fileName);
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(getData);
            if(fos!=null){
                fos.close();
            if(inputStream!=null){
                inputStream.close();
            System.out.println("info:"+url+" download success");
        } catch (Exception e) {
            System.out.println(e);
        }finally {
            if (null != connection) {
                connection.disconnect();

保存的文件打不开,通过byte数据可以看到301了。

<head><title>301 Moved Permanently</title></head> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx/1.18.0</center> </body> </html>

通过 conn.getHeaderFields()  发现url重定向到了 https请求,

进行重定向后的url获取:

String newUrl = "";
            if(conn.getHeaderFields().keySet().contains("Location")){
                newUrl = conn.getHeaderFields().get("Location").get(0);
            url = new URL(newUrl);
            HttpURLConnection conn2 = (HttpURLConnection)url.openConnection();
            //设置超时间为3秒
            conn2.setConnectTimeout(3*1000);

执行报错:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

解决SSL问题,修改为https,并忽略验证,否则会报错

            url = new URL(newUrl);
            HttpsURLConnection conn2 = (HttpsURLConnection)url.openConnection();
            //设置超时间为3秒
            conn2.setConnectTimeout(3*1000);
            conn2.setHostnameVerifier(DO_NOT_VERIFY);

这时候,报证书问题了:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

最后解决:

* 从输入流中获取字节数组 * @param inputStream * @return * @throws IOException public static byte[] readInputStream(InputStream inputStream) throws IOException { byte[] buffer = new byte[1024]; int len = 0; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while((len = inputStream.read(buffer)) != -1) { bos.write(buffer, 0, len); bos.close(); return bos.toByteArray(); final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { @Override public boolean verify(String s, SSLSession sslSession) { return true; public static void main(String[] args) { HttpURLConnection connection = null; try { String url2 = "http://wechaapi.xmskygzc.com/data/datafile/onlineService/signFile/2022/03/07/4be5418407e24209a0ac24f913bb5927_3864.pdf"; URL url = new URL(url2); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); String newUrl = ""; if(conn.getHeaderFields().keySet().contains("Location")){ newUrl = conn.getHeaderFields().get("Location").get(0); url = new URL(newUrl); HttpsURLConnection conn2 = (HttpsURLConnection)url.openConnection(); //设置超时间为3秒 conn2.setConnectTimeout(3*1000); conn2.setHostnameVerifier(DO_NOT_VERIFY); //得到输入流 InputStream inputStream = conn2.getInputStream(); //获取自己数组 byte[] getData = readInputStream(inputStream); //文件保存位置 File saveDir = new File("K:\\home\\q\\"); if(!saveDir.exists()){ saveDir.mkdir(); String fileName = "123.pdf"; File file = new File(saveDir+File.separator+fileName); FileOutputStream fos = new FileOutputStream(file); fos.write(getData); if(fos!=null){ fos.close(); if(inputStream!=null){ inputStream.close(); System.out.println("info:"+url+" download success"); } catch (Exception e) { System.out.println(e); }finally { if (null != connection) { connection.disconnect(); public static void main2(String[] args) { HttpURLConnection connection = null; try { String url2 = "http://www.***.com/e5418407e29a0ac24f913bb5927_3864.pdf"; URL url = new URL(url2); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); String newUrl = ""; if(conn.getHeaderFields().keySet().contains("Location")){ newUrl = conn.getHeaderFields().get("Location").get(0); url = new URL(newUrl); ignoreSsl(); HttpsURLConnection conn2 = (HttpsURLConnection)url.openConnection(); //设置超时间为3秒 conn2.setConnectTimeout(3*1000); conn2.setHostnameVerifier(DO_NOT_VERIFY); //得到输入流 InputStream inputStream = conn2.getInputStream(); //获取自己数组 byte[] getData = readInputStream(inputStream); //文件保存位置 File saveDir = new File("K:\\home\\q\\"); if(!saveDir.exists()){ saveDir.mkdir(); String fileName = "123.pdf"; File file = new File(saveDir+File.separator+fileName); FileOutputStream fos = new FileOutputStream(file); fos.write(getData); if(fos!=null){ fos.close(); if(inputStream!=null){ inputStream.close(); System.out.println("info:"+url+" download success"); } catch (Exception e) { System.out.println(e); }finally { if (null != connection) { connection.disconnect(); private static void trustAllHttpsCertificates() throws Exception { TrustManager[] trustAllCerts = new TrustManager[1]; TrustManager tm = new miTM(); trustAllCerts[0] = tm; SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, null); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); static class miTM implements TrustManager,X509TrustManager { public X509Certificate[] getAcceptedIssuers() { return null; public boolean isServerTrusted(X509Certificate[] certs) { return true; public boolean isClientTrusted(X509Certificate[] certs) { return true; public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException { return; public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { return; * 忽略HTTPS请求的SSL证书,必须在openConnection之前调用 * @throws Exception public static void ignoreSsl() throws Exception{ HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost()); return true; trustAllHttpsCertificates(); HttpsURLConnection.setDefaultHostnameVerifier(hv); 异常关键词:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target下载代码public stat 支持文件夹上传,且要求在服务端保留层级结构。文件夹数量要求支持到10W。 支持大文件断点续传,要求刷新浏览器,重启浏览器,重启电脑后仍然能够继续上传。文件大小要求能够支持到50个G。 支持自动加载本地文件,要求能够自动加载指定的本地文件。 支持文件批量下载,要求不要
参考:http://m.blog.csdn.net/blog/telenewbie/44815035 问题产生的原因是https网站的证书不是Android所信任的证书。解决方案之一是去android授权的证书发证机构申请正式证书。 另外一种就是修改客户端代码,强制通过所有证书为信任。这样做会有安全漏洞的问题。 HttpDownloader.java
最近发现在做https请求时,会报出SSL握手异常 javax.net.ssl.SSLHandshakeException: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate signature. 仔细看了下,用HttpUrlConne
清明假期前,我们需要执行一个批量操作,把腾讯云的视频下载下来,使用python脚本压缩并转码后上传到腾讯云另一个桶。写完代码后,跑起来观察了一会,一切正常。 然而回来后发现,线程卡住了,而且没有任何的日志输出,所以完全不知道问题出在哪里。重启容器后,代码继续正常跑,可是跑了几个小时后,再次出现。 代码如下: public boolean downloadNet(String videoUrl, String filePath) throws...
可以使用 Java 中的 java.net.URL 类和 java.net.HttpURLConnection 类来实现文件下载功能。具体步骤如下: 1. 构造 URL 对象并设置需要下载文件的 URL 地址。 2. 打开 URL 连接并设置请求头信息,例如 User-Agent、Referer 等。 3. 获取响应码,如果响应码为 200 则代表可以下载文件。 4. 获取文件的输入流并创建文件的输出流,读取输入流中的数据并将其保存到输出流中。 5. 关闭输入输出流和 URL 连接。 以下是 Java 示例代码: try { // 1、构造 URL 对象 URL url = new URL("http://example.com/file.txt"); // 2、打开 URL 连接并设置请求头信息 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("User-Agent", "Mozilla/5.0"); conn.setRequestProperty("Referer", "http://example.com"); // 3、获取响应码 int responseCode = conn.getResponseCode(); if (responseCode == 200) { // 4、获取文件的输入流并创建文件的输出流 InputStream in = conn.getInputStream(); OutputStream out = new FileOutputStream("local-file.txt"); // 读取输入流中的数据并将其保存到输出流中 byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); // 5、关闭输入输出流和 URL 连接 out.close(); in.close(); conn.disconnect(); System.out.println("文件下载成功"); } else { System.out.println("文件下载失败,响应码:" + responseCode); } catch (IOException e) { System.out.println("文件下载异常:" + e.getMessage()); 希望能帮到您!
ajax上传图片TypeError: 'append' called on an object that does not implement interface FormData.