android 请求https接口
来源:互联网 发布:飓风算法 是什么 编辑:程序博客网 时间:2024/05/22 00:48
随着互联网的强大,网络安全的地位也逐步增加。以前的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; } @Override public void checkClientTrusted( java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { } @Override public void checkServerTrusted( java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { } }; sslContext.init(null, new TrustManager[]{tm}, null); } @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); } @Override public 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 的密码跟证书初始化 trusted trusted.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>() { @Override public void onSuccess(ResponseInfo<String> stringResponseInfo) { String json = stringResponseInfo.result; LogUtils.e("json", json); new Handler() { @Override public 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); } @Override public void onFailure(HttpException e, String s) { LogUtils.e("onFailure", s); pullToRefreshLayout.refreshFinish(PullToRefreshLayout.FAIL); } });
第5步
大功告成!可能有些细节没太说清,以后会回来更进的。- android 请求https接口
- post请求https接口
- Android下OkHttp请求自定义HTTPS证书接口设置
- [通过HttpWebRequest请求https接口]
- Android 请求https 网址
- Android请求Https网址
- Android--https请求
- Android Https请求详解
- Android HTTPS请求总结
- Android Https请求调用
- android 使用https请求
- 【JAVA WEB】使用HTTPS请求外部接口
- Java 请求https接口不需要安装证书
- Android 实现 HttpClient 请求Https
- Android Https请求详细demo
- Android Https请求详细demo
- Android Https请求详细demo
- Android WebView https请求问题。
- H5禁止手机自带键盘弹出
- Android RecycleView设置头部或者底部视图,给固定高度失效问题
- 配置HDFS HttpFS和WebHDFS
- windows php7+nginx1.10 环境搭建
- 04-树4 是否同一棵二叉搜索树 (25分)
- android 请求https接口
- Dribbble 2016十大设计趋势总结
- VS2012 CString转char*时,每个字符后面都会多出一个\0的解决办法
- python 各类型转换
- 【软考】软件攻城狮考试(六)——硬件
- 安装hue-3.11.0
- ffmpeg使用三:ffempg录屏编码rtmp推流
- 第九周 OJ 第几天
- Java 九九乘法表