随着互联网的强大,网络安全的地位也逐步增加。以前的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接口相关推荐

  1. php发送https请求,php post 请求https接口

    /** * POST请求https接口返回内容 * @param string $url [请求的URL地址] * @param string $post [请求的参数] * @return stri ...

  2. 请求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 ...

  3. Postman请求https接口配置

    Postman请求https接口配置 1.进入postman的设置界面: 2.关闭general下面的ssl校验: 3.切到Certificates页签,并添加客户端校验: 1.进入postman的设 ...

  4. KETTLE 请求HTTPS接口

    KETTLE本身提供了HTTP client.HTTP post.REST client组件可以访问HTTP接口,这些组件在访问HTTPS接口时有时会报错:unable to find valid c ...

  5. php请求https接口

    1.输入接口: https://CRMC URL/ spservice/downring.do? sid =1234 & sidpwd =123456& randomsessionke ...

  6. android请求https(一)生成BKS

    本文乃博主方便以后忘记可以快速拾起而撰写的,不喜勿喷. 最近公司的项目要用到https请求,负责服务器的同事给了我证书,搞了一天都没成功,老是挂掉.(如果不太清楚可以先搜索下SSL握手) 后来在网上才 ...

  7. Android 请求PHP接口, 返回json, 开头有问号, 解决方案

    windos 上面开发, 没毛病,  部署到linux上面, 就有问题, ?{json} bom头??,   文件编码, 管他的 解决方案 ob_clean(); //加入这个函数 echo $thi ...

  8. postman测试https接口

    前一篇都配置了nginx支持https访问.我想也把https测试也好好写一下. 过程:给postman添加证书文件=>postman禁用https校验=>测试一个https请求 一.给p ...

  9. android 接口实现方法,Android应用开发之Android 请求网络接口实现方法

    本文将带你了解Android应用开发之Android 请求网络接口实现方法,希望本文对大家学Android有所帮助. public   class Fragment01 extends Fragmen ...

最新文章

  1. 身患安全杂症,企业如何“下药”?
  2. 算法系列15天速成——第三天 七大经典排序【下】
  3. 理解HTTP session原理及应用
  4. 2019牛客多校第一场
  5. 为什么ES模块比CommonJS更好?
  6. Win10之fastboot devices无反应
  7. C++结构体字节对齐
  8. 数据之路 - Python爬虫 - urllib库
  9. cocos2d-x 3.0对label的改进
  10. javascript与php数据交换之json
  11. Linux系统结构图
  12. 简易的NTC-10K-3950测温
  13. onlyoffice源码编译环境搭建破解
  14. iis 缓存 静态文件_强制更新IIS中的缓存JavaScript文件
  15. 文件包含漏洞及简单绕过
  16. 通过挑土豆—我学会了如何区分JS数组的遍历方法
  17. 主题:内存的管理 DATE:2004-09-17
  18. 单片机c语言交通信号灯设计,基于51单片机的交通信号灯设计毕业设计.pdf
  19. python——pandas展示所有列
  20. 什么是Merkle Tree(默克尔树)

热门文章

  1. prp和php,PRP注射后有效缓解折磨三年的疼痛
  2. 科芙兰CORFLAN燕窝胶原蛋白肽饮品适合什么人群饮用
  3. 微软服务器系统ssd,在UCS B200 M5上安装带M.2 SSD的操作系统(VMware、Windows)
  4. 107+今日闲情:想吃我没那么容易.(16年分析解答)
  5. textarea实现宽度不变高度自适应
  6. 升级linux mint内核,如何升级 Linux Mint 19.1 为 Linux Mint 19.2
  7. 灌区信息化和灌区自动化监测方案
  8. C++多线程,多线程通信,队列
  9. edas部署需要哪些参数_edas配置
  10. K8S集群rook部署ceph集群