系列文章目录
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可用。