- 浏览: 196932 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1330转http://blog.csdn.net/gumanr ... -
HTTP常用Header讲解
2012-11-18 11:06 10681、HTTP请求协议名://主 ... -
Android列表索引实现
2012-07-15 10:47 6626最近做一个项目用到了列表索引,所以在网上找了一下,发现一个博客 ... -
Android开发环境搭建(Windows)
2012-07-03 13:37 758什么都不说来,直接下载附件好了,这个图文的不好发布 -
Linux下Android环境搭建
2012-07-03 13:34 1184--以Ubuntu为例 Linux下Android环境 ... -
Android ListView 滑动背景为黑色的解决办法
2012-06-28 22:08 1010转至:http://blog.163.com/zh ... -
Android蓝牙开发
2012-06-26 15:38 1464今天查了一些资料,然后发现一篇文章挺好,关于蓝牙的,原文网址: ... -
Android自定义对话框
2012-06-22 11:36 2454这时我封装的一个对话框工具类 package com. ... -
Android语音采集
2012-06-18 10:55 15466Android端的语音采集主要是调用AudioRecord,首 ... -
Android语音识别
2012-06-18 09:28 2226Android由于有了Google的支持,那么他的语音识别做起 ... -
Android监控
2012-06-08 20:04 1431Android的监控一般都是需要用到Jni的,然后进行NDK编 ... -
Android视频播放
2012-05-24 19:55 1854视频播放优好多种,一种是播放系统可以播放的视频文件,一种是播放 ... -
重写android返回键
2012-05-24 19:23 21866在Activity里面加入下面代码: @Overrid ... -
Android图像处理工具类
2012-04-09 09:37 2477还是最近整理代码、、发现了一个师兄写的图片工具类,感觉还是蛮有 ... -
Android导出xls文件
2012-04-08 15:45 6535整理硬盘的时候找到了这些代码,看了一下,发现还有点用处,所以就 ... -
android的文字跑马灯效果
2012-04-03 21:04 7267今天问了解决文本内容过长的显示问题,而用了一个android自 ... -
Android超级简单的TabView实现
2012-04-03 20:56 7120可能很多人都有想要实现一个导航栏,但是不知道改怎么弄,因为an ... -
ImageView的属性android:scaleType
2012-04-03 20:04 2000ImageView的属性android:scaleType ... -
关于Android程序的全屏显示
2012-04-03 19:53 973对于Android开发来说,全屏和无标题是我们常用的几行代码, ... -
Android文件下载
2012-03-19 16:45 1314嘿嘿,也不知道什么时候写的代码,清理硬盘的时候发现了,而且还能 ...
相关推荐
详见http://blog.csdn.net/huaxun66/article/details/53666855#t10
HTTPS通信在webview中使用
关于android基于局域网socket通信的完整demo,详细见https://blog.csdn.net/weixin_40998254/article/details/81163701
1,本Demo是使用 android studio 2.1 编写,可以...2,本Demo是对google推荐的串口通信开源项目android_serialport_api的简化,便于学习; 3,使用方法见博客:https://blog.csdn.net/haiger_xxx/article/details/51597237
Android通过https协议与服务器端进行通信
全面详细介绍了https 双向 通信 安全验证原理以及在android系统上的实现。
android串口通信google官方demo https://code.google.com/archive/p/android-serialport-api/
这是https与tomcat服务器,android通信的全部流程配置,以及需要的包源代码,我弄了3天才搞定的,网上资料很多,可是都是一个人弄一端,不好调试,所以一直搞不定,如果是一个人弄的话,就可以很快的搞定。...
本项目包含4种情况对应httpclient/httpurlconnection以及是否需要验证服务端证书实现android通过https通信
本Demo主要实现了安卓(Android)TCP 客户端(Client)和服务器(Server)Demo的Socket通讯。以及对接硬件的项目数据在十六进制&&byte&&int的转换处理。 要注意BufferedReader的readLine()方法的阻塞问题: 读取socket输入...
android https实现客户端与服务端通信 提高程序的安全性
1.Android studio 串口通信参考demo 2.博客相关:https://blog.csdn.net/qq_30297763/article/details/85997689
Android串口通信:抱歉,学会它真的可以为所欲为,详细解释参考博客:https://blog.csdn.net/u010312949/article/details/80199018
Android 串口 无弹窗 Android 串口 无弹窗 Android 串口 无弹窗 详情请看博客:https://blog.csdn.net/qq_37069563
该Demo满足日常的蓝牙通信开发,可以做到收发数据,做到与设备间的交互,可根据该链接以找到使用方法:https://blog.csdn.net/qq_35809640/article/details/66472626
本例在“Android studio版阿里云物联网平台设备接入源代码(简单易懂)”链接地址:https://download.csdn.net/download/m0_72963799/86506504?spm=1001.2014.3001.5503 的基础上进行了升级改进,利用云数据流转功能...
基于安卓5.1.1开发的串口通信。演示地址:https://www.jianshu.com/p/3f208e9db884 做了4年纯软件开发,第一次做串口通信,感觉所有的坑都走了一遍!
Android tcp/ip客户端程序,实现Android客户端与Ubuntu ros 服务器通信,连接成功之后客户端发送数据,服务器收到数据之后返回。 参考:https://blog.csdn.net/weixin_42100710/article/details/126390181
module间Activity相互启动,传值方面直接看activityrouter官方文档https://github.com/mzule/ActivityRouter