63 lines
2.5 KiB
Java
63 lines
2.5 KiB
Java
package me.chayapak1.chomensbot_mabe.util;
|
|
|
|
import javax.net.ssl.KeyManager;
|
|
import javax.net.ssl.SSLContext;
|
|
import javax.net.ssl.TrustManager;
|
|
import javax.net.ssl.X509TrustManager;
|
|
import java.io.*;
|
|
import java.net.URL;
|
|
import java.net.URLConnection;
|
|
import java.security.KeyManagementException;
|
|
import java.security.NoSuchAlgorithmException;
|
|
import java.security.SecureRandom;
|
|
import java.security.cert.X509Certificate;
|
|
|
|
public class DownloadUtilities {
|
|
private static class DefaultTrustManager implements X509TrustManager {
|
|
@Override
|
|
public void checkClientTrusted(X509Certificate[] arg0, String arg1) {}
|
|
|
|
@Override
|
|
public void checkServerTrusted(X509Certificate[] arg0, String arg1) {}
|
|
|
|
@Override
|
|
public X509Certificate[] getAcceptedIssuers() {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static byte[] DownloadToByteArray(URL url, int maxSize) throws IOException, KeyManagementException, NoSuchAlgorithmException {
|
|
SSLContext ctx = SSLContext.getInstance("TLS");
|
|
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
|
|
SSLContext.setDefault(ctx);
|
|
URLConnection conn = url.openConnection();
|
|
conn.setConnectTimeout(5000);
|
|
conn.setReadTimeout(10000);
|
|
// https://www.whatismybrowser.com/guides/the-latest-user-agent/windows
|
|
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36");
|
|
|
|
try (BufferedInputStream downloadStream = new BufferedInputStream(conn.getInputStream())) {
|
|
ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
|
|
byte[] buf = new byte[1024];
|
|
int n;
|
|
int tot = 0;
|
|
while ((n = downloadStream.read(buf)) > 0) {
|
|
byteArrayStream.write(buf, 0, n);
|
|
tot += n;
|
|
if (tot > maxSize) {
|
|
throw new IOException("File is too large");
|
|
}
|
|
if (Thread.interrupted()) {
|
|
return null;
|
|
}
|
|
}
|
|
return byteArrayStream.toByteArray();
|
|
}
|
|
// Closing a ByteArrayInputStream has no effect, so I do not close it.
|
|
}
|
|
|
|
public static InputStream DownloadToInputStream(URL url, int maxSize) throws KeyManagementException, NoSuchAlgorithmException, IOException {
|
|
return new ByteArrayInputStream(DownloadToByteArray(url, maxSize));
|
|
}
|
|
}
|