前面写了http的联网方式,Android平台上经常有使用https的需求,对于https服务器使用的根证书是受信任的证书的话,实现https是非常简单的,直接用httpclient库就行了,与使用http几乎没有区别。但是在大多数情况下,服务器所使用的根证书是自签名的,或者签名机构不在设备的信任证书列表中,这样使用httpclient进行https连接就会失败。解决这个问题的办法有两种,一是在发起https连接之前将服务器证书加到httpclient的信任证书列表中,这个相对来说比较复杂一些,很容易出错;另一种办法是让httpclient信任所有的服务器证书,这种办法相对来说简单很多,但安全性则差一些,但在某些场合下有一定的应用场景。这一篇主要实现httpclient信任所有的服务器证书。
直接给出代码:
public class HttpsTestActivity extends Activity {
/** Called when the activity is first created. */
private TextView text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text=(TextView)findViewById(R.id.textView1);
GetHttps();
}
private void GetHttps(){
String https = "https://www.google.com.hk";
try{
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[]{new MyTrustManager()}, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new MyHostnameVerifier());
HttpsURLConnection conn = (HttpsURLConnection)new URL(https).openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null)
sb.append(line);
text.setText(sb.toString());
}catch(Exception e){
Log.e(this.getClass().getName(), e.getMessage());
}
}
private class MyHostnameVerifier implements HostnameVerifier{
@Override
public boolean verify(String hostname, SSLSession session) {
// TODO Auto-generated method stub
return true;
}
}
private class MyTrustManager implements X509TrustManager{
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return null;
}
}
}
使用HttpsURLConnection时需要实现HostnameVerifier 和 X509TrustManager,这两个实现是必须的,要不会报安全验证异常。
/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*
*/
分享到:
相关推荐
3. **第16章**:这个文件名可能是某个教程或书籍的一部分,可能包含了与游戏开发相关的特定章节内容,如游戏设计、Android编程技巧或者是特定游戏机制的实现。 通过分析这些文件,我们可以推测这个压缩包不仅提供了...
这个压缩包文件“安卓Android源码——Gmail备份手机短信源码.zip”提供了一个示例,展示了如何利用Android SDK将手机短信备份到Gmail邮箱中。通过分析这个源码,我们可以学习到以下几个关键知识点: 1. **Android...
【标题】中的“安卓Android源码——安卓Android随机验证码”表明了这个...学习和分析这份源码可以帮助开发者理解如何在Android应用中实现安全的验证码功能,同时也可以提升对Android编程、随机数生成和安全性的理解。
《Android游戏源码解析——基于“忍者快跑”》 在移动开发领域,Android平台以其开源、灵活的特性吸引了大量的开发者。对于Android游戏开发,理解并分析源码是提升技术能力的重要途径。本篇文章将深入探讨“忍者快...
这份"Android源码——远程登录源码.zip"的压缩包文件提供了一套完整的Android远程登录应用的源代码,对于开发者来说,这是一个深入理解Android网络编程、安全性和用户认证机制的宝贵资源。以下是对这个源码包中可能...
【Android——本息计算器】是一个基于Android平台的计算器应用,主要功能是帮助用户计算贷款的本息情况。...通过分析和学习这样的项目,开发者不仅可以提升Android编程技能,还能增进对金融计算的理解。
【标题】: "安卓Android源码——WordPress for Android.zip" 涵盖了构建和理解Android平台上WordPress应用程序的源代码。这个压缩包包含了项目的基本构建配置文件和资源,是深入学习Android开发,尤其是针对...
总的来说,这份“安卓Android源码——实现远程控制PC源代码”可能会包含以上所有提到的组件和功能,通过分析和学习这个源码,开发者可以掌握远程控制应用的实现细节,进一步提升自己的Android开发技能。为了深入理解...
在Android中,这通常涉及HTTP或HTTPS协议,利用Socket编程或者使用如OkHttp这样的网络库来发送请求。 2. **Android网络请求**:Android系统需要在主线程之外处理网络请求,以避免阻塞UI。可以使用AsyncTask、...
在安卓(Android)平台上开发应用时,涉及到多媒体处理和网络通信是常见的需求。这个压缩包“安卓Android源码——android...开发者可以通过研究这个示例源码,深入理解Android多媒体和网络编程,提高自己的开发技能。
本次我们关注的是"Android源码——新浪微博Android客户端",通过对这一开源项目的深入研究,我们可以了解到Android应用设计的诸多细节,包括用户界面(UI)构建、网络通信、数据存储以及性能优化等多个方面。...
这个名为“安卓Android源码——远程登录含有loading登录效”的压缩包文件,显然包含了关于实现远程登录功能并带有加载效果(loading)的源代码示例。远程登录通常涉及到网络通信和数据传输,而loading效果则是提升...
《安卓Android源码解析——SwiFTP FTP服务器实现详解》 在移动开发领域,尤其是在安卓平台上,有时我们需要在设备上实现文件传输功能,这时FTP(File Transfer Protocol)服务器就显得尤为重要。SwiFTP是一款专门为...
本篇文章将基于提供的"Android源码——新浪微博Android客户端"进行深度解析,旨在帮助开发者了解其内部机制,学习优秀的编程实践。 首先,我们要明白,微博客户端是一个功能丰富的社交应用,它的实现涉及到了...
【标题】:“安卓Android源码——WebService航班查询源码.zip”揭示了如何在Android平台上实现一个基于WebService的航班查询功能。这个源码包是开发者学习Android应用开发,特别是网络通信和数据解析的重要参考资料...
首先,Android远程登录通常涉及到网络编程,主要使用HTTP或HTTPS协议与服务器进行通信。开发者会使用HttpURLConnection或者第三方库如OkHttp来发送网络请求,处理登录验证。登录请求通常包括用户名、密码等用户凭证...
通过深入研究《安卓Android源码——口袋微博服务器客户端代码》,开发者不仅可以掌握Android网络编程技巧,还能了解到如何设计和实现一个完整的社交应用客户端,这对于提升个人的Android开发能力具有显著帮助。...
《安卓Android源码解析——基于AnjoyoSinaWeibo项目》 在移动开发领域,安卓Android作为主流操作系统,其源码研究对于开发者来说至关重要。本文将深入探讨AnjoyoSinaWeibo项目,这是一个针对Android平台的新浪微博...