实现代码:


package com.fyfeng.httpstest;


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.net.URL;
import java.security.Principal;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;


import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;


import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;


public class MainActivity extends Activity {

private static final String tag = MainActivity.class.getSimpleName();


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


View button = this.findViewById(R.id.button);


button.setOnClickListener(new OnClickListener(){


@Override
public void onClick(View v) {
onclick();
}});
}


private void onclick(){

new Thread(new Runnable(){


@Override
public void run() {
try{
String str = "https://www.oschina.net/home/login?goto_page=http%3A%2F%2Fwww.oschina.net%2F";
URL url = new URL(str);

SSLContext sslctxt = SSLContext.getInstance("TLS");

sslctxt.init(null, new TrustManager[]{new MyX509TrustManager()}, new java.security.SecureRandom());

HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();

conn.setSSLSocketFactory(sslctxt.getSocketFactory());
conn.setHostnameVerifier(new MyHostnameVerifier());

conn.connect();

int respCode = conn.getResponseCode();
Log.d(tag, "ResponseCode="+respCode);
InputStream input = conn.getInputStream();


String result = toString(input);

Log.d(tag, "result:"+result);

input.close();

conn.disconnect();
}catch(Exception e){
e.printStackTrace();
}
}
private String toString(InputStream input){

String content = null;
try{
InputStreamReader ir = new InputStreamReader(input);
BufferedReader br = new BufferedReader(ir);

StringBuilder sbuff = new StringBuilder();
while(null != br){
String temp = br.readLine();
if(null == temp)break;
sbuff.append(temp).append(System.getProperty("line.separator"));
}

content = sbuff.toString();
}catch(Exception e){
e.printStackTrace();
}

return content;
}
}).start();;
}





static class MyX509TrustManager implements X509TrustManager{


@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
if(null != chain){
for(int k=0; k < chain.length; k++){
X509Certificate cer = chain[k];
print(cer);
}
}
Log.d(tag, "check client trusted. authType="+authType);

}


@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
if(null != chain){
for(int k=0; k < chain.length; k++){
X509Certificate cer = chain[k];
print(cer);
}
}
Log.d(tag, "check servlet trusted. authType="+authType);
}


@Override
public X509Certificate[] getAcceptedIssuers() {

Log.d(tag, "get acceptedissuer");

return null;
}


private void print(X509Certificate cer){

int version = cer.getVersion();
String sinname = cer.getSigAlgName();
String type = cer.getType();
String algorname = cer.getPublicKey().getAlgorithm();
BigInteger serialnum = cer.getSerialNumber();
Principal principal = cer.getIssuerDN();
String principalname = principal.getName();

Log.d(tag, "version="+version+", sinname="+sinname+", type="+type+", algorname="+algorname+", serialnum="+serialnum+", principalname="+principalname);
}

}

static class MyHostnameVerifier implements HostnameVerifier{


@Override
public boolean verify(String hostname, SSLSession session) {
Log.d(tag, "hostname="+hostname+",PeerHost= "+session.getPeerHost());
return true;
}

}


}



示例代码地址:http://download.csdn.net/detail/yzwlord/5828209





更多相关文章

  1. android Service实例解释
  2. Android(安卓)录制音频示例
  3. Android(安卓)补间动画
  4. Building, running, and debugging Android(安卓)source
  5. android教你怎么轻松实现手机推送功能,一步一步教你Mob+MobPush实
  6. Android和iOS如何连接指定的蓝牙设备
  7. 横竖屏优化
  8. Android(安卓)7.0解析包时出现问题 的解决方案(应用内更新)
  9. android 自定义换件--数字图象时钟控件

随机推荐

  1. 布局的标记建议和一些更一般的问题
  2. IDEA SpringBoot入门与速查—HTML页与Thy
  3. sublime text3快速生成html头部信息
  4. 【HTML&CSS】【7】网址栏左侧出现的图标I
  5. 如何选择两个h2之间的所有元素
  6. Jquery-如何使用prop方法更改backgroundC
  7. JQuery选择器和操作得到的元素
  8. less 转css 实现有问题的笔记
  9. 如何在Angular js制作水平手风琴?
  10. 是否有更快的方法来遍历HTMLDocument中的