java下载https的网络图片,添加安全证书方式
一、下载网址安全证书,导入证书
需要从所访问的https网址上下载一个安全证书,名字自定义
把下载好的安全证书导入到你本地安装的jdk里面(win10)
windows+x 快捷键,选择管理员运行 powershell
进入到自己的/jre/bin目录,我的是"C:\Program Files\Java\jdk1.8\jre\bin"
# 特别提示,路径加上双引号,因为Program Files带有空格,不加引号会报错
cd "C:\Program Files\Java\jdk1.8\jre\bin"
不加引号报错:
加上引号
执行导入命令
keytool -import -v -trustcacerts -alias my_cert -file F:\my_cert.cer -storepass changeit -keystore "C:\Program Files\Java\jdk1.8\jre\lib\security\cacerts"
解释说明:
- -alias hik_cert, hik_cert是可以自己修改的名称, -file F:\my_cert.cer 是上边导出的证书的位置,同样,这里的证书名字也是随便取的,但前提是保证将C:\Program Files\Java\jdk1.8\jre\lib\security\目录的cacerts文件内之前没有导入同名证书,就是要保证你将要导入的证书名称唯一性。
- changeit 是密码, java默认的。
- keytool是jdk中bin目录的一个exe文件,是jdk默认自带的,在我电脑的目录是:C:\Program Files\Java\jdk1.8\jre\bin\keytool.exe
- 其他保持不变。
- 如果提示:“是否信任此证书? [否]:” ,那么请输入"y"。
- 当出现:”证书已添加到密钥库中 [正在存储cacerts]“的时候,那么恭喜你已经添加成功。
二、java运行java程序下载图片
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
@Test
public void download() {
// 图片地址
String strUrl = "https://**********";
downloadImgByNet(strUrl, "F:\\", "222.png");
}
/**
* 抓取网上的图片
*
* @param imgSrc
* @param filePath
*/
public static void downloadImgByNet(String imgSrc, String filePath, String fileName) {
try {
URL url = new URL(imgSrc);
URLConnection conn = url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(3 * 1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//输出流
InputStream str = conn.getInputStream();
//控制流的大小为1k
byte[] bs = new byte[1024];
//读取到的长度
int len = 0;
//是否需要创建文件夹
File saveDir = new File(filePath);
if (!saveDir.exists()) {
saveDir.mkdir();
}
File file = new File(saveDir + File.separator + fileName);
//实例输出一个对象
FileOutputStream out = new FileOutputStream(file);
//循环判断,如果读取的个数b为空了,则is.read()方法返回-1,具体请参考InputStream的read();
while ((len = str.read(bs)) != -1) {
//将对象写入到对应的文件中
out.write(bs, 0, len);
}
//刷新流
out.flush();
//关闭流
out.close();
str.close();
System.out.println("下载成功");
} catch (Exception e) {
e.printStackTrace();
}
}