package com.test.restful;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class TestHttpsURLConnection {
public final static boolean DEBUG = true;
public static void main(String[] args) {
try{
String httpsURL = " https://192.168.0.137/restful/services/auth/login";
URL myurl = new URL(httpsURL);
//Use MyX509TrustManager
TrustManager[] trustMyCerts = new TrustManager[] { new MyX509TrustManager()};
//Trust All
// TrustManager[] trustMyCerts = new TrustManager[] { new X509TrustManager(){
// @Override
// public void checkClientTrusted(X509Certificate[] chain,
// String authType) throws CertificateException {
// }
// @Override
// public void checkServerTrusted(X509Certificate[] chain,
// String authType) throws CertificateException {
// }
// @Override
// public X509Certificate[] getAcceptedIssuers() {
// return null;
// }
// }};
//Implement HostnameVerifier
HostnameVerifier hv = new HostnameVerifier()
{
public boolean verify(String urlHostName, SSLSession session)
{
if(DEBUG){
System.out.println("Warning: URL Host: "+urlHostName+" vs. "+session.getPeerHost());
}
return urlHostName.equalsIgnoreCase(session.getPeerHost());
}
};
//Initial SSLContext
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustMyCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(hv);
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestProperty("Content-Length", "2");
DataOutputStream dataOs = new DataOutputStream(con.getOutputStream());
dataOs.writeBytes("{'username':'shinko','password':'5437'}");
dataOs.flush();
dataOs.close();
if (DEBUG) {
System.out.println("Response Code : " + con.getResponseCode());
System.out.println("Cipher Suite : " + con.getCipherSuite());
System.out.println("\n");
Certificate[] certs = con.getServerCertificates();
for(Certificate cert : certs){
System.out.println("Cert Type : " + cert.getType());
System.out.println("Cert Hash Code : " + cert.hashCode());
System.out.println("Cert Public Key Algorithm : " + cert.getPublicKey().getAlgorithm());
System.out.println("Cert Public Key Format : " + cert.getPublicKey().getFormat());
System.out.println("\n");
}
}
InputStream ins = con.getInputStream();
InputStreamReader isr = new InputStreamReader(ins);
BufferedReader in = new BufferedReader(isr);
String inputLine;
while ((inputLine = in.readLine()) != null)
{
System.out.println(inputLine);
}
in.close();
}catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
星期一, 9月 12, 2011
[Java] HttpsUrlConnection
JAVA使用HttpsUrlConnection建立Https的Request。
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言
留個話吧:)