package fr.umlv.ji.tcp.client.https;
import java.io.*;
import java.net.URL;
import javax.net.ssl.*;
import java.util.prefs.*;
import java.security.GeneralSecurityException;
import fr.umlv.ji.ssl.SSLHelper;
public class HTTPSClient {
public final static int BUFFER_SIZE = 1024;
public static void main(String[] args)
throws IOException, GeneralSecurityException {
if(args.length != 1) {
System.err.println("Usage: java " +
HTTPSClient.class.getName() +
" <https://...>");
System.exit(1);
}
Preferences prefs = Preferences.userNodeForPackage(HTTPSClient.class);
String keyStore = prefs.get("keyStore",null);
char[] keySecret =
prefs.get("keySecret", "keySecret").toCharArray();
char[] keyPassword =
prefs.get("keyPassword", "keyPassword").toCharArray();
String trustStore = prefs.get("trustStore","trustStore");
char[] trustSecret =
prefs.get("trustSecret", "trustSecret").toCharArray();
URL url = new URL(args[0]);
HttpsURLConnection connection =
(HttpsURLConnection) url.openConnection();
SSLContext context;
if(keyStore == null) {
context = SSLHelper.getSSLContext(trustStore,trustSecret);
} else {
context = SSLHelper.getSSLContext(keyStore, keySecret, keyPassword,
trustStore, trustSecret);
}
connection.setSSLSocketFactory(context.getSocketFactory());
connection.setHostnameVerifier(new CanonicalHostnameVerifier());
connection.connect();
InputStream in = new BufferedInputStream(connection.getInputStream());
int length = connection.getContentLength();
byte[] buffer = new byte[BUFFER_SIZE];
int nb;
for(;length!=0;length-=nb) {
nb = in.read(buffer);
if(nb == -1) {
break;
}
System.out.write(buffer, 0, nb);
}
}
}