- 浏览: 199553 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
guoshijie1990:
写的不错
Android Https通信 -
xiaochi_84:
你好,我想问一下。为什么我在java工程里测试没有问题。但是到 ...
Android导出xls文件 -
Visual_chenpeng:
Android Https通信 -
jasonpeak:
求jasonpeak 写道我的为什么按返回键还是不关闭呢?求破 ...
Android关于ProgressDialog按返回键关闭 -
jasonpeak:
我的为什么按返回键还是不关闭呢?
Android关于ProgressDialog按返回键关闭
https与http的通信,在我看来主要的区别在于https多了一个安全验证机制,而Android采用的是X509验证,首先我们需要这重写X509类,建立我们的验证规则、、不过对于特定的项目,我们一般都是无条件信任服务端的,因此我们可以对任何证书都无条件信任(其实本质上我们只是信任了特定url的证书,为了偷懒,才那么选择的)/**
* 信任所有主机-对于任何证书都不做检查 */ class MytmArray implements X509TrustManager { public X509Certificate[] getAcceptedIssuers() { // return null; return new X509Certificate[] {}; } @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 // System.out.println("cert: " + chain[0].toString() + ", authType: " // + authType); } };
好了,我们写好了信任规则,接下载就要创建一个主机的信任列表
static TrustManager[] xtmArray = new MytmArray[] { new MytmArray() }; /** * 信任所有主机-对于任何证书都不做检查 */ private static void trustAllHosts() { // Create a trust manager that does not validate certificate chains // Android 采用X509的证书信息机制 // Install the all-trusting trust manager try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, xtmArray, new java.security.SecureRandom()); HttpsURLConnection .setDefaultSSLSocketFactory(sc.getSocketFactory()); // HttpsURLConnection.setDefaultHostnameVerifier(DO_NOT_VERIFY);// // 不进行主机名确认 } catch (Exception e) { e.printStackTrace(); } } static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { // TODO Auto-generated method stub // System.out.println("Warning: URL Host: " + hostname + " vs. " // + session.getPeerHost()); return true; } };
上面的都是https通信需要做的几个基本要求,接下载我们要做的就是https的使用啦下面就以get和post为例进行说明,中间还涉及到cookie的使用
String httpUrl="XXXXX" String result = ""; HttpURLConnection http = null; URL url; try { url = new URL(httpUrl); // 判断是http请求还是https请求 if (url.getProtocol().toLowerCase().equals("https")) { trustAllHosts(); http = (HttpsURLConnection) url.openConnection(); ((HttpsURLConnection) http).setHostnameVerifier(DO_NOT_VERIFY);// 不进行主机名确认 } else { http = (HttpURLConnection) url.openConnection(); } http.setConnectTimeout(10000);// 设置超时时间 http.setReadTimeout(50000); http.setRequestMethod("GET");// 设置请求类型为 http.setDoInput(true); http.setRequestProperty("Content-Type", "text/xml"); //http.getResponseCode());http或https返回状态200还是403 BufferedReader in = null; if (obj.getHttpStatus() == 200) { getCookie(http); in = new BufferedReader(new InputStreamReader( http.getInputStream())); } else in = new BufferedReader(new InputStreamReader( http.getErrorStream())); result = in.readLine(); Log.i("result", result); in.close(); http.disconnect();
https或http的get请求写好了,哦中间涉及到了一个getCookie的方法,如下:
/** 得到cookie */ private static void getCookie(HttpURLConnection http) { String cookieVal = null; String key = null; DataDefine.mCookieStore = ""; for (int i = 1; (key = http.getHeaderFieldKey(i)) != null; i++) { if (key.equalsIgnoreCase("set-cookie")) { cookieVal = http.getHeaderField(i); cookieVal = cookieVal.substring(0, cookieVal.indexOf(";")); DataDefine.mCookieStore = DataDefine.mCookieStore + cookieVal + ";"; } } }public static Query HttpQueryReturnClass(String httpUrl, String base64) {
String result = ""; Log.i("控制", httpUrl); Query obj = new Query(); HttpURLConnection http = null; URL url; try { url = new URL(httpUrl); // 判断是http请求还是https请求 if (url.getProtocol().toLowerCase().equals("https")) { trustAllHosts(); http = (HttpsURLConnection) url.openConnection(); ((HttpsURLConnection) http).setHostnameVerifier(DO_NOT_VERIFY);// 不进行主机名确认 } else { http = (HttpURLConnection) url.openConnection(); } http.setConnectTimeout(10000);// 设置超时时间 http.setReadTimeout(50000); http.setRequestMethod("POST");// 设置请求类型为post http.setDoInput(true); http.setDoOutput(true); http.setRequestProperty("Content-Type", "text/xml"); http.setRequestProperty("Cookie", DataDefine.mCookieStore); DataOutputStream out = new DataOutputStream(http.getOutputStream()); out.writeBytes(base64); out.flush(); out.close(); obj.setHttpStatus(http.getResponseCode());// 设置http返回状态200还是403 BufferedReader in = null; if (obj.getHttpStatus() == 200) { getCookie(http); in = new BufferedReader(new InputStreamReader( http.getInputStream())); } else in = new BufferedReader(new InputStreamReader( http.getErrorStream())); result = in.readLine();// 得到返回结果 in.close(); http.disconnect(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }这里面的base64是我经过base64加密过以后的数据
评论
4 楼
guoshijie1990
2016-08-16
写的不错
3 楼
Visual_chenpeng
2014-10-27
2 楼
na_tsu
2013-07-11
有完整的代码吗?发到我的邮箱liangzhanhong90@163.com,谢谢
1 楼
zy_zhangyuan88
2013-06-05
有demo吗?发到我邮箱472918259@qq.com,急用!谢谢大侠
发表评论
-
Android获取设备信息
2012-11-22 00:10 1391转http://blog.csdn.net/gumanr ... -
HTTP常用Header讲解
2012-11-18 11:06 11171、HTTP请求协议名://主 ... -
Android列表索引实现
2012-07-15 10:47 6688最近做一个项目用到了列表索引,所以在网上找了一下,发现一个博客 ... -
Android开发环境搭建(Windows)
2012-07-03 13:37 792什么都不说来,直接下载附件好了,这个图文的不好发布 -
Linux下Android环境搭建
2012-07-03 13:34 1232--以Ubuntu为例 Linux下Android环境 ... -
Android ListView 滑动背景为黑色的解决办法
2012-06-28 22:08 1071转至:http://blog.163.com/zh ... -
Android蓝牙开发
2012-06-26 15:38 1529今天查了一些资料,然后发现一篇文章挺好,关于蓝牙的,原文网址: ... -
Android自定义对话框
2012-06-22 11:36 2504这时我封装的一个对话框工具类 package com. ... -
Android语音采集
2012-06-18 10:55 15590Android端的语音采集主要是调用AudioRecord,首 ... -
Android语音识别
2012-06-18 09:28 2273Android由于有了Google的支持,那么他的语音识别做起 ... -
Android监控
2012-06-08 20:04 1508Android的监控一般都是需要用到Jni的,然后进行NDK编 ... -
Android视频播放
2012-05-24 19:55 1904视频播放优好多种,一种是播放系统可以播放的视频文件,一种是播放 ... -
重写android返回键
2012-05-24 19:23 21912在Activity里面加入下面代码: @Overrid ... -
Android图像处理工具类
2012-04-09 09:37 2520还是最近整理代码、、发现了一个师兄写的图片工具类,感觉还是蛮有 ... -
Android导出xls文件
2012-04-08 15:45 6610整理硬盘的时候找到了这些代码,看了一下,发现还有点用处,所以就 ... -
android的文字跑马灯效果
2012-04-03 21:04 7306今天问了解决文本内容过长的显示问题,而用了一个android自 ... -
Android超级简单的TabView实现
2012-04-03 20:56 7178可能很多人都有想要实现一个导航栏,但是不知道改怎么弄,因为an ... -
ImageView的属性android:scaleType
2012-04-03 20:04 2053ImageView的属性android:scaleType ... -
关于Android程序的全屏显示
2012-04-03 19:53 1012对于Android开发来说,全屏和无标题是我们常用的几行代码, ... -
Android文件下载
2012-03-19 16:45 1371嘿嘿,也不知道什么时候写的代码,清理硬盘的时候发现了,而且还能 ...
相关推荐
在Android开发中,HTTPS通信是保护用户数据安全的重要手段,特别是在传输敏感信息如登录凭证、个人信息等时。本文将深入探讨Android中HTTPS通信的改进版,以提高应用的安全性和性能。 首先,理解HTTPS的核心概念至...
在Android应用开发中,HTTPS通信是确保数据安全传输的重要手段,尤其是在使用WebView组件时。WebView是一种可以在应用程序内部显示网页内容的控件,因此理解如何在WebView中正确实施HTTPS通信至关重要。 首先,...
博客链接<https://blog.csdn.net/qq_37069563>可能提供了具体的代码示例和详细步骤,可以帮助开发者深入理解并实现Android串口通信。Code文件可能包含这个示例项目的源代码,通过分析和学习这些代码,可以更直观地...
Android系统支持标准的Java SSL/TLS实现,可以通过HttpURLConnection或OkHttp等第三方库实现HTTPS通信。为了实现双向认证,Android客户端需要提供自己的证书,这通常涉及修改系统的信任存储或自定义TrustManager。 ...
5. **编程实现**:在Android应用开发中,使用第三方库如UsbSerial(https://github.com/felHR85/UsbSerial)可以简化USB通信的实现。这个库为多种常见的USB串口芯片提供了封装好的API,包括Arduino常用的FTDI、CH340...
在Android开发中,进行HTTP通信是常见的操作,用于与服务器交换数据。HTTP(超文本传输协议)是一种基于TCP/IP通信协议来交换数据的应用层协议,广泛应用于网页浏览、API交互等场景。本教程将深入讲解如何在Android...
在Android开发中,网络通信是应用与服务器交互的重要方式,使得手机应用能够获取或发送数据。本实例将向你展示如何在Android环境中实现简单的HTTP GET和POST请求,这对于初学者来说是一个很好的学习起点。 首先,...
在Android平台上进行网络通信是应用程序开发中的重要组成部分,因为大多数现代应用都需要与远程服务器进行交互,获取或发送数据。Android提供了多种方式来实现这一目标,包括基础的Java网络API、特定于Android的网络...
"Android 通过 HTTPS 协议与服务器端进行通信" Android 通过 HTTPS 协议与服务器端进行通信是指 Android 客户端使用 HTTPS 协议与服务器端建立连接,并进行数据交换的过程。HTTPS 协议是基于 HTTP 协议的加密版本,...
3. **HTTP/HTTPS**:虽然不是直接的局域网通信协议,但在某些场景下,可以作为传输层,如通过服务器转发数据到其他设备。 4. **Bonjour/Zeroconf**:适合于发现局域网内的服务,如打印机、文件服务器等。 三、实现...
首先,Android平台提供了多种网络通信方式,包括HTTP/HTTPS、Socket编程、FTP、Bluetooth等。其中,HTTP/HTTPS是最常见的网络请求方式,通过Android的HttpURLConnection或第三方库如OkHttp、Volley等实现。这些论文...
Android USB通信源码/DEMO 说明:https://blog.csdn.net/lxt1292352578/article/details/131976810 github:https://github.com/LXTTTTTT/USBtoSerialPortDemo 连接流程: 获取当前系统可用的 USB 设备列表 → 选中...
1,本Demo是使用 android studio 2.1 编写,可以...2,本Demo是对google推荐的串口通信开源项目android_serialport_api的简化,便于学习; 3,使用方法见博客:https://blog.csdn.net/haiger_xxx/article/details/51597237
在Android平台上实现语音通信涉及到多个技术领域,包括网络通信、音频处理、权限管理以及API的使用等。以下是对这些知识点的详细阐述: 1. **网络通信**:Android语音通信的基础是建立可靠的网络连接,通常使用TCP...
总结来说,Android组件化开发中的模块间Activity通信是一个重要的话题。通过使用像ActivityRouter这样的库,开发者可以有效地管理和简化不同模块间的交互,提高代码的可读性和可维护性。同时,理解并熟练掌握这类...
Android中的`HttpClient`是Apache HTTP客户端库的一部分,它支持HTTPS通信。在使用HttpClient时,需要创建一个`SSLSocketFactory`实例来处理SSL连接。通过`KeyStore`加载服务端的公钥证书,然后设置到`...
在Android应用开发中,与服务器进行通信是必不可少的环节,特别是在构建涉及用户登录、数据交换等应用场景时。本文将深入探讨Android与服务器通信的基本概念、技术选型以及具体实现方式,以标题“android与服务器...
首先,Java Web(通常指的是基于Java Servlet、JSP和相关技术构建的Web应用程序)与Android之间的通信主要涉及两种方式:HTTP/HTTPS请求和WebSocket。HTTP/HTTPS是最基础的通信协议,适用于简单的客户端-服务器交互...
本Demo主要实现了安卓(Android)TCP 客户端(Client)和服务器(Server)Demo的Socket通讯。以及对接硬件的项目数据在十六进制&&byte&&int的转换处理。 要注意BufferedReader的readLine()方法的阻塞问题: 读取socket输入...