? ? ? ? 最近在對接外部接口時(shí)遇到返回的圖片所在的服務(wù)器全都沒有ssl證書,導(dǎo)致在前端直接用img標(biāo)簽展示時(shí)圖片開裂。于是轉(zhuǎn)為通過后端獲取,繞過ssl驗(yàn)證之后轉(zhuǎn)為base64返回。記錄一下代碼段。文章來源地址http://www.zghlxwxcb.cn/news/detail-618806.html
package com.sy.ai.common.utils;
import cn.hutool.core.codec.Base64Encoder;
import lombok.extern.slf4j.Slf4j;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
@Slf4j
public class ImageUtil {
public static String imageUrlToBase64(String imgUrl){
URL url = null;
InputStream is = null;
ByteArrayOutputStream outStream = null;
HttpURLConnection httpUrl = null;
try {
// 忽略ssl
trustAllHttpsCertificates();
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
url = new URL(imgUrl);
httpUrl =(HttpURLConnection) url.openConnection();
// 連接超時(shí)
httpUrl.setConnectTimeout(10000);
// 讀取超時(shí)、服務(wù)器響應(yīng)慢
httpUrl.setReadTimeout(10000);
httpUrl.connect();
is = httpUrl.getInputStream();
outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = is.read(buffer)) != -1){
outStream.write(buffer,0, len);
}
return "data:image/png;base64," + encode(outStream.toByteArray());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String encode(byte[] image) {
return Base64Encoder.encode(image);
}
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 {
@Override
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;
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
}
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
}
}
}
文章來源:http://www.zghlxwxcb.cn/news/detail-618806.html
到了這里,關(guān)于Java讀取外鏈圖片忽略ssl驗(yàn)證轉(zhuǎn)為base64的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!