android 请求https接口
随着互联网的强大,网络安全的地位也逐步增加。以前的http请求已经不在安全,据说ios2017年1月份开始请求https。
所有,身为android开发人员也应该会加载https请求。直接上干活
1.本人使用的是xutils框架。xutls框架默认请求时调用的是SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER(也就是不检查证书)
2.如果想使用自定义的信任证书的话,xutils的httputils里有configSSLSocketFactory()方法来设置这个
实现的步骤
第1步: 创建自签名证书和.bks 文件
1)
创建 BKS 或者 keystore, 需要用到下面这个文件,bcprov-jdk15on-146.jar, 版本很多, 我用的是这个:http://www.bouncycastle.org/download/bcprov-jdk15on-146.jar, 下载后, 把文件存到 C:\codeproject.
然后用 Keytool 生成 keystore 文件.(keytool 是 Java SDK 自带的文件, 跟javac 放在同一个目录下)在命令提示符窗口中输入 keytool 就能看到这个工具的各种选项说明. 或者输入下列路径运行.
"C:\Program Files (x86)\Java\jre7\bin>keytool".
2)
下面是用 keytool 生成 keysotre 文件的命令. 要是这个文件已经存在, 这一步可以忽略.
keytool -genkey -alias codeproject -keystore C:\codeproject\codeprojectssl.keystore -validity 365
这行命令创建一个别名为 code project 的密钥(key), 生成的文件名是 codeprojectssl.keystore. 执行文件生成过程中会要求输入密钥(key)跟keystore的密码诸如此类的东东. 这里需要注意下, 当要求你录入 Common name 的时候, 要填你的主机名. 本文例子用的是: codeproject.com
3)
keytool -export -alias codeproject -keystore C:\codeproject\codeprojectssl.keystore -file C:\codeproject\codeprojectsslcert.cer
这行命令将密钥(key)从 .keystore 文件导入 .cer 文件.
4)
keytool -import -alias codeproject -file C:\codeproject\codeprojectsslcert.cer -keystore C:\codeproject\codeprojectssl.bks -storetype BKS -providerClass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath C:\codeproject\bcprov-jdk15on-146.jar
搞定! 现在, 全部 .bks 文件都生成了. 稍后将这些文件复制到安卓应用中. 连接那些使用自签名证书的服务器的时候会用到.
第2步
把 .keystore 文件复制到 /androidappdir/res/raw/
第3步
新建一个SSLSocketFactoryEx类继承SSLSocketFactory
/*** Created by Administrator on 2016/10/28 0028.* user:tyk*/
public class SSLSocketFactoryEx extends SSLSocketFactory {SSLContext sslContext = SSLContext.getInstance("SSL");//SSLContext sslContext = SSLContext.getInstance("TLS");public SSLSocketFactoryEx(KeyStore truststore)throws NoSuchAlgorithmException, KeyManagementException,KeyStoreException, UnrecoverableKeyException {super(truststore);TrustManager tm = new X509TrustManager() {public java.security.cert.X509Certificate[] getAcceptedIssuers() {return null;}@Overridepublic void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType)throws java.security.cert.CertificateException {}@Overridepublic void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)throws java.security.cert.CertificateException {}};sslContext.init(null, new TrustManager[]{tm}, null);}@Overridepublic Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);}@Overridepublic Socket createSocket() throws IOException {return sslContext.getSocketFactory().createSocket();}
}
第4步
在httpUtls中设置configSSLSocketFactory
RequestParams params = new RequestParams();params.addBodyParameter("newsId", "f5d030e8a9c8431d8dfdfd881f4b1f8e");params.addBodyParameter("bindid", "binggou");params.addBodyParameter("token", "888888");HttpUtils httpUtls = new HttpUtils();try {KeyStore trusted = KeyStore.getInstance("BKS");// 从资源文件中读取你自己创建的那个包含证书的 keystore 文件InputStream in = PulltorefreshActivity.this.getResources().openRawResource(R.raw.codeprojectssl); //这个参数改成你的 keystore 文件名// 用 keystore 的密码跟证书初始化 trustedtrusted.load(in, "123456".toCharArray());SSLSocketFactoryEx sf = new SSLSocketFactoryEx(trusted);sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);httpUtls.configSSLSocketFactory(sf);} catch (Exception e) {LogUtils.e("Exception",e.toString()+"123");}httpUtls.send(HttpRequest.HttpMethod.POST, "https://api.binggou.com", params, new RequestCallBack<String>() {@Overridepublic void onSuccess(ResponseInfo<String> stringResponseInfo) {String json = stringResponseInfo.result;LogUtils.e("json", json);new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);items = new ArrayList<String>();items.add("我是刷新加的数据");items.add("可下拉刷新上拉加载的ListView");items.add("可下拉刷新上拉加载的GridView");items.add("可下拉刷新上拉加载的ExpandableListView");items.add("可下拉刷新上拉加载的SrcollView");items.add("可下拉刷新上拉加载的WebView");items.add("可下拉刷新上拉加载的ImageView");items.add("可下拉刷新上拉加载的TextView");adapter = new MyAdapter(PulltorefreshActivity.this, items);listView.setAdapter(adapter);pullToRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED);}}.sendEmptyMessageDelayed(0, 1000);}@Overridepublic void onFailure(HttpException e, String s) {LogUtils.e("onFailure", s);pullToRefreshLayout.refreshFinish(PullToRefreshLayout.FAIL);}});
第5步
大功告成!可能有些细节没太说清,以后会回来更进的。
android 请求https接口相关推荐
- php发送https请求,php post 请求https接口
/** * POST请求https接口返回内容 * @param string $url [请求的URL地址] * @param string $post [请求的参数] * @return stri ...
- 请求https接口时报错:Caused by SSLError(SSLError(1, u‘[SSL: CERTIFICATE_VERIFY_FAILED] certificat,安装certifi
标题 请求https接口时报错:Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificat,安装certi ...
- Postman请求https接口配置
Postman请求https接口配置 1.进入postman的设置界面: 2.关闭general下面的ssl校验: 3.切到Certificates页签,并添加客户端校验: 1.进入postman的设 ...
- KETTLE 请求HTTPS接口
KETTLE本身提供了HTTP client.HTTP post.REST client组件可以访问HTTP接口,这些组件在访问HTTPS接口时有时会报错:unable to find valid c ...
- php请求https接口
1.输入接口: https://CRMC URL/ spservice/downring.do? sid =1234 & sidpwd =123456& randomsessionke ...
- android请求https(一)生成BKS
本文乃博主方便以后忘记可以快速拾起而撰写的,不喜勿喷. 最近公司的项目要用到https请求,负责服务器的同事给了我证书,搞了一天都没成功,老是挂掉.(如果不太清楚可以先搜索下SSL握手) 后来在网上才 ...
- Android 请求PHP接口, 返回json, 开头有问号, 解决方案
windos 上面开发, 没毛病, 部署到linux上面, 就有问题, ?{json} bom头??, 文件编码, 管他的 解决方案 ob_clean(); //加入这个函数 echo $thi ...
- postman测试https接口
前一篇都配置了nginx支持https访问.我想也把https测试也好好写一下. 过程:给postman添加证书文件=>postman禁用https校验=>测试一个https请求 一.给p ...
- android 接口实现方法,Android应用开发之Android 请求网络接口实现方法
本文将带你了解Android应用开发之Android 请求网络接口实现方法,希望本文对大家学Android有所帮助. public class Fragment01 extends Fragmen ...
最新文章
- 身患安全杂症,企业如何“下药”?
- 算法系列15天速成——第三天 七大经典排序【下】
- 理解HTTP session原理及应用
- 2019牛客多校第一场
- 为什么ES模块比CommonJS更好?
- Win10之fastboot devices无反应
- C++结构体字节对齐
- 数据之路 - Python爬虫 - urllib库
- cocos2d-x 3.0对label的改进
- javascript与php数据交换之json
- Linux系统结构图
- 简易的NTC-10K-3950测温
- onlyoffice源码编译环境搭建破解
- iis 缓存 静态文件_强制更新IIS中的缓存JavaScript文件
- 文件包含漏洞及简单绕过
- 通过挑土豆—我学会了如何区分JS数组的遍历方法
- 主题:内存的管理 DATE:2004-09-17
- 单片机c语言交通信号灯设计,基于51单片机的交通信号灯设计毕业设计.pdf
- python——pandas展示所有列
- 什么是Merkle Tree(默克尔树)
热门文章
- prp和php,PRP注射后有效缓解折磨三年的疼痛
- 科芙兰CORFLAN燕窝胶原蛋白肽饮品适合什么人群饮用
- 微软服务器系统ssd,在UCS B200 M5上安装带M.2 SSD的操作系统(VMware、Windows)
- 107+今日闲情:想吃我没那么容易.(16年分析解答)
- textarea实现宽度不变高度自适应
- 升级linux mint内核,如何升级 Linux Mint 19.1 为 Linux Mint 19.2
- 灌区信息化和灌区自动化监测方案
- C++多线程,多线程通信,队列
- edas部署需要哪些参数_edas配置
- K8S集群rook部署ceph集群