直接给代码吧。研究了几天才搞定......

public static final String CLIENT_KET_PASSWORD = "Ku6OpqKDfN4=305790"; //

	public static String getNewHttpClient(String url)
{ try
{
// KeyStore trustStore = KeyStore.getInstance("PKCS12", "BC");
// trustStore
// .load(PcPostApplication.getInstance().getAssets()
// .open("abc.pfx"), CLIENT_KET_PASSWORD.toCharArray());
SSLSocketFactory sf =
new SSLSocketFactoryEx(AppConfig.mKeyStore,
AppConfig.CERTFILE_PASSWORD.toCharArray());
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory
.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443)); HttpClient client = null;
String msg = "";
try
{
ClientConnectionManager ccm =
new ThreadSafeClientConnManager(params, registry);
client = new DefaultHttpClient(ccm, params);
HttpGet hg = new HttpGet(url);
HttpResponse response = client.execute(hg);
HttpEntity entity = response.getEntity();
if (entity != null)
{
InputStream instreams = entity.getContent();
msg = convertStreamToString(instreams);
}
return msg;
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
catch (Exception e)
{
e.printStackTrace();
}
return "";
} public static String convertStreamToString(InputStream is)
{
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder(); String line = "";
try
{
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
is.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return sb.toString();
}

上面的载入证书并请求,可是在这须要注意一个问题SSLSocketFactory须要自己定义,看以下自己定义的代码:

public class SSLSocketFactoryEx extends SSLSocketFactory
{ SSLContext sslContext = SSLContext.getInstance("TLS"); public SSLSocketFactoryEx(KeyStore truststore, char[] arry)
throws NoSuchAlgorithmException, KeyManagementException,
KeyStoreException, UnrecoverableKeyException
{
super(truststore);
KeyManagerFactory localKeyManagerFactory =
KeyManagerFactory.getInstance(KeyManagerFactory
.getDefaultAlgorithm());
localKeyManagerFactory.init(truststore, arry);
KeyManager[] arrayOfKeyManager =
localKeyManagerFactory.getKeyManagers();
TrustManager tm = new X509TrustManager()
{ @Override
public X509Certificate[] getAcceptedIssuers()
{
return null;
} @Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException
{ } @Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException
{ }
}; sslContext.init(arrayOfKeyManager, new TrustManager[] { tm },
new java.security.SecureRandom());
} @Override
public Socket createSocket(Socket socket, String host, int port,
boolean autoClose) throws IOException, UnknownHostException
{
return sslContext.getSocketFactory().createSocket(socket, host, port,
autoClose);
} @Override
public Socket createSocket() throws IOException
{
return sslContext.getSocketFactory().createSocket();
}
}

由于是双向握手,那个sslcontext不能初始化为空.....问题攻克了......

android https通过载入pfx证书获取数据的更多相关文章

  1. Android:解决client从server上获取数据乱码的方法

    向server发送HTTP请求.接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity()," ...

  2. Android使用AsyncTask异步线程网络通信获取数据(get json)

    摘要: android 4.0以上强制要求不能在主线程执行耗时的网络操作,网络操作需要使用Thead+Handler或AsyncTask,本文将介绍AsyncTask的使用方法. 内容: 1.添加Ht ...

  3. Android Studio中获取sha1证书指纹数据的方法

    高德地图开发申请KEY的时候需要开发者提供SHA1证书指纹数据,在eclipse很容易就找到了,但是Android Studio很久也没找到,只能使用在网上看到的方法了,在Android Studio ...

  4. Android 中获取 debug 测试 SHA1 和 release SHA1 证书指纹数据的方法

    百度地图开发的时候要申请KEY,需要提供SHA1证书指纹数据 Eclipse eclipse中直接查看:windows -> preferance -> android -> bui ...

  5. Android登录client,验证码的获取,网页数据抓取与解析,HttpWatch基本使用

    大家好,我是M1ko.在互联网时代的今天,假设一个App不接入互联网.那么这个App一定不会有长时间的生命周期,因此Android网络编程是每个Android开发人员必备的技能.博主是在校大学生,自学 ...

  6. Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. I.MX6 Android Linux shell MMPF0100 i2c 获取数据

    #!/system/bin/busybox ash # # I.MX6 Android Linux shell MMPF0100 i2c 获取数据 # 说明: # 本文主要记录通过shell脚本来获取 ...

  8. Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)

    Fragment与Activity之间的数据交换,通常含有3: 一.Fragment从Activity获取数据(仅本文介绍了一个第一): 两.Activity从Fragment获取数据: 三.Frag ...

  9. Android 开发 values目录里定义数组、颜色、文本、尺寸xml配置文件并且获取数据 附录Android符号转码表

    以下xml都在res/values/文件夹下创建 创建String类型array: /app/src/main/res/values/array.xml <?xml version=" ...

随机推荐

  1. matrix67:kmp算法详解

    个人认为KMP是最没有必要讲的东西,因为这个东西网上能找到很多资料.但网上的讲法基本上都涉及到“移动(shift)”.“Next函数”等概念,这非常容易产生误解(至少一年半前我看这些资料学习KMP时就 ...

  2. elk 架构

  3. 和S5933比较起来,开发PLX9054比较不幸,可能是第一次开发PCI的缘故吧。因为,很多PCI的例子都是对S5933,就连微软出版的《Programming the Microsoft Windows Driver Model》都提供了一个完整的S5933的例子。 在这篇有关DDK的开发论文里。

    和S5933比较起来,开发PLX9054比较不幸,可能是第一次开发PCI的缘故吧.因为,很多PCI的例子都是对S5933,就连微软出版的<Programming the Microsoft Wi ...

  4. stm32之USART通信

    任何USART通信,需要用到2个对外连接的引脚:RxD,TxD: RxD是输入引脚,用于串行数据接收: TxD是输出引脚,用于串行数据发送: SCLK引脚:发生器时钟输出(同步模式下,异步模式下不需要 ...

  5. nginx负载 发向代理配置文件参考

    来自server+iis  linux可做参考 : #user nobody; worker_processes 8; #worker_cpu_affinity 00000001 00000010 0 ...

  6. Ural 1079 - Maximum

    Consider the sequence of numbers ai, i = 0, 1, 2, …, which satisfies the following requirements: a0  ...

  7. Week7(10月21日)

    Part I:提问  =========================== 1.请为下图编写视图代码,视图中表单提交后,交给当前控制器和动作处理. 2.如何实现点击列标题排序功能? 3.分页时采用了 ...

  8. Qt 操作 pdf 文件

    写了好久的东西,不小心按了下返回键就没了.CSDN居然没自动保存,坑爹啊 原本还有很多信息的,现在直入正题吧. QT没有内置PDF操作的功能(其实有一个,QPrinter,不过只能写不能读,基本是半残 ...

  9. 17.1.1.4 Obtaining the Replication Master Binary Log Coordinates 获取复制Master Binary Log的坐标:

    17.1.1.4 Obtaining the Replication Master Binary Log Coordinates 获取复制Master Binary Log的坐标: 你需要master ...

  10. qq邮箱是怎么做到同一个浏览器让多个不用用户同时打开的? --session的控制

    待解:..... 借鉴网址:http://www.zhihu.com/question/20235500 欢迎来讨论.....