package org.zpcat.test.network;
import org.zpcat.test.TLSApplicaton;
import android.os.AsyncTask;
import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
/**
* Created by moses on 4/23/15.
*/
public class UrlConnectionRequst implements AsyncNetRequest {
private final String TAG = "TLSdemo";
private ReqCallback mReqCallback;
private String mUrl;
private SSLSocketFactory mSSLSocketFactory;
@Override
public void request(String url, SSLSocketFactory sslSocketFactory,
HashMap<String, String> params, ReqCallback callback) {
mReqCallback = callback;
mUrl = url;
Log.e(TAG, "https: " + mUrl);
mSSLSocketFactory = sslSocketFactory;
if (mSSLSocketFactory == null) {
Log.e(TAG, "sslsocketfactory is null");
}
new NetAsyncTask().execute(mUrl);
}
private class NetAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
char[] buffer = new char[2048];
URL url = new URL(mUrl);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
//httpsConn.setSSLSocketFactory(TLSApplicaton.getInstance().getDefaultSSLSocketFactory());
httpConn.setReadTimeout(10000);
httpConn.setConnectTimeout(15000);
httpConn.setRequestMethod("GET");
httpConn.setDoInput(true);
if ("https".equalsIgnoreCase(url.getProtocol()) && mSSLSocketFactory != null) {
Log.e(TAG, "Set sslSocketFactory.");
((HttpsURLConnection) httpConn).setSSLSocketFactory(mSSLSocketFactory);
((HttpsURLConnection) httpConn).setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
}
httpConn.connect();
int response = httpConn.getResponseCode();
Log.e(TAG, "https response code: " + response);
InputStream in = httpConn.getInputStream();
Reader reader = null;
reader = new InputStreamReader(in, "UTF-8");
int length = reader.read(buffer);
char[] tmpBuf = new char[length];
System.arraycopy(buffer, 0, tmpBuf, 0, length);
return new String(tmpBuf);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String ret) {
super.onPostExecute(ret);
if (mReqCallback != null) {
mReqCallback.onResult(ret);
}
}
}
}