Java 网络编程 03 —— URL下载资源

系列文章目录

Java 网络编程 01 —— Socket TCP通信
Java 网络编程 02 —— Socket UDP通信
Java 网络编程 03 —— URL下载资源



1. Java 网络编程—URL

     URL即统一资源定位符,用于定位互联网上的某一个资源,我们可以通过URL类+文件流实现网络资源下载。

     URL格式:协议://IP地址:端口/项目名/资源

    例如:https://baijiahao.baidu.com/s?id=1689363829118209355&wfr=spider&for=pc

Java中有URL类,如下代码。

package lessen03;

import java.net.MalformedURLException;
import java.net.URL;

public class URLDemo01 {
    
    
    public static void main(String[] args) throws MalformedURLException {
    
    
        //该URL实际不存在,下列方法是分割该URL获取想要的内容
        URL url = new URL("https://localhost:8080/helloworld/index.jsp?username=zhang&password=123");
        System.out.println(url.getProtocol());//协议
        System.out.println(url.getHost());//IP
        System.out.println(url.getPort());//端口
        System.out.println(url.getPath());//文件路径
        System.out.println(url.getFile());//完整文件路径
        System.out.println(url.getQuery());//参数
    }
}

2. 通过URL下载网易云音乐【证书问题解决】

 
其中解决证书信任问题参考这两位博客,解释了证书问题。

  java在访问https资源时的证书信任问题
  java在访问https资源时,忽略证书信任问题

具体下载资源代码如下:

package lessen03;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.logging.Logger;

public class URLDown01 {
    
    

    //这里是解决证书问题代码-头
    private static Logger logger;
    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());
    }
    //这里是解决证书问题的代码-尾

    public static void main(String[] args) throws Exception {
    
    

        //该部分必须在获取connection前调用
        trustAllHttpsCertificates();
        HostnameVerifier hv = new HostnameVerifier() {
    
    
            public boolean verify(String urlHostName, SSLSession session) {
    
    
                logger.info("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
                return true;
            }
        };
        HttpsURLConnection.setDefaultHostnameVerifier(hv);
        
        //核心代码从这开始
        //1. 创建一个URL
        URL url = new URL("https://m701.music.126.net/20210120105307/bf794ade74d38e0810a3c0984eb45ccf/jdyyaac/5558/0052/550c/b26bf204b4781483b72cbfcc9d09dadc.m4a");
        //2. 打开连接
        HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
        //3. 获取输入流
        InputStream is = urlConnection.getInputStream();
        //4. 获取文件输出流
        FileOutputStream fos = new FileOutputStream("出山.m4a");
        //5. 开始下载
        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) != -1) {
    
    
            fos.write(buffer, 0, len);
        }
        //6.关闭资源
        fos.close();
        is.close();
        urlConnection.disconnect();
        //核心代码到这结束
    }

    //这里是解决证书问题的代码-头
    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;
        }
    }
    //这里是解决证书问题的代码-尾
}

    中间核心代码部分就是通过URL配合IO流下载网上资源的方法。

    如何查找需要的URL看下面图片:

查找需要的url
    建议复制了URL后,粘贴到浏览器试试,如果浏览器能正常播放说明该URL可用。

猜你喜欢

转载自blog.csdn.net/qq_39763246/article/details/112859444