android 使用xutils3 https详解
来源:互联网 发布:php对小数的处理 编辑:程序博客网 时间:2024/06/05 19:18
随着17年ios上线必须要支持https,以及考虑到网络安全这块,越来越多的APP开发支持和使用https。
在gradle里配置 compile 'org.xutils:xutils:3.2.2'
在Application里配置
x.Ext.init(this); x.Ext.setDebug(BuildConfig.DEBUG);
编写NetWorkUtils.java文件
public class NetWorkUtils { private static SSLContext mSSLContext = null; private static final String TAG = "NetWorkUtils"; public static int DEFAULT_CACHE_EXPIRY_TIME = 30 * 1000; /** * http get请求 * * @param params 请求参数 get请求使用 addQueryStringParameter方法添加参数 * @param callback 回调对象 */ public static Callback.Cancelable getHttpRequest(RequestParams params, final HttpCallback callback) { return sendHttpRequest(HttpMethod.GET, params, callback); } /** * http post请求 * * @param params 请求参数 post请求使用 addBodyParameter方法添加参数 * @param callback 回调对象 */ public static Callback.Cancelable postHttpRequest(RequestParams params, final HttpCallback callback) { return sendHttpRequest(HttpMethod.POST, params, callback); } public static Callback.Cancelable sendHttpRequest(HttpMethod method, RequestParams params, final HttpCallback callback) { if (params == null) { params = new RequestParams(); } params.setCacheMaxAge(1000 * 0); //为请求添加缓存时间 params.setConnectTimeout(DEFAULT_CACHE_EXPIRY_TIME); final String url = params.getUri(); LogUtil.d("sendRequest: url = " + url); SSLContext sslContext = getSSLContext(GoPlusApplication.getApplication()); if (null == sslContext) { if (BuildConfig.DEBUG) LogManager.d(TAG, "Error:Can't Get SSLContext!"); return null; } params.setSslSocketFactory(sslContext.getSocketFactory()); return x.http().request(method, params, new Callback.CommonCallback<String>() { @Override public void onCancelled(CancelledException msg) { Toast.makeText(text, msg.getMessage(), Toast.LENGTH_SHORT).show(); callback.onFinished(); } @Override public void onError(Throwable arg0, boolean arg1) { Toast.makeText(text, arg0.getMessage(), Toast.LENGTH_SHORT).show(); LogManager.i(TAG, "==> RequestCallBack.onError()"); LogManager.e(TAG, "==> response:" + arg0.getMessage() + "\n==> error:" + arg1); callback.onFinished(); } @Override public void onSuccess(String result) { LogManager.i(TAG, "==> RequestCallBack.onSuccess()"); if (result == null) { return; } callback.onSuccess(result); } @Override public void onFinished() { LogUtil.d("onFinished"); } }); } /** * 获取Https的证书 * * @param context 上下文 * @return SSL的上下文对象 */ private static SSLContext getSSLContext(Context context) { CertificateFactory certificateFactory = null; InputStream inputStream = null; Certificate cer = null; KeyStore keystore = null; TrustManagerFactory trustManagerFactory = null; try { certificateFactory = CertificateFactory.getInstance("X.509"); inputStream = context.getAssets().open("baidu.cer");//这里导入SSL证书文件 try { cer = certificateFactory.generateCertificate(inputStream); LogManager.i(TAG, cer.getPublicKey().toString()); } finally { inputStream.close(); } //创建一个证书库,并将证书导入证书库 keystore = KeyStore.getInstance(KeyStore.getDefaultType()); keystore.load(null, null); //双向验证时使用 keystore.setCertificateEntry("trust", cer); // 实例化信任库 trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keystore); mSSLContext = SSLContext.getInstance("TLS"); mSSLContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom()); //信任所有证书 (官方不推荐使用)// s_sSLContext.init(null, new TrustManager[]{new X509TrustManager() {//// @Override// public X509Certificate[] getAcceptedIssuers() {// return null;// }//// @Override// public void checkServerTrusted(X509Certificate[] arg0, String arg1)// throws CertificateException {//// }//// @Override// public void checkClientTrusted(X509Certificate[] arg0, String arg1)// throws CertificateException {//// }// }}, new SecureRandom()); return mSSLContext; } catch (Exception e) { e.printStackTrace(); } return null; }} public static abstract class HttpCallback { public abstract void onSucc(String result); public abstract void onfailed(); }
在activity中调用
RequestParams params = new RequestParams(url); NetWorkUtils.postHttpRequest(params, new HttpCallback() { @Override public void onSuccess(String result) { } @Override public void onFinished() { } }); }
1 0
- android 使用xutils3 https详解
- 开源库xUtils3使用详解
- Xutils3.3.26使用详解
- Xutils3.3.26使用详解
- 开源库xUtils3使用详解
- Xutils3.0使用详解
- Android xutils3.0 使用
- Android使用xUtils3上传文件
- Android开发框架xUtils3.x新手教学(二)HTTPS访问
- 高效开发使用框架请求https(xutils3 Nohttp,OkhttpUtils(zhy))
- xUtils3 详解
- xutils3框架之数据库使用详解!
- xutils3框架之数据库使用详解!
- Android xUtils3的使用及下载地址
- Android中XUtils3详细使用及介绍
- Android 开源项目xUtils3使用教程
- Android开发 使用Xutils3请求、解析数据
- android XUtils3框架的基本使用
- Sublime Text注册码
- Android 获取视频缩略图的 与播放视频的冲突
- 【求助】AsyncHttpResponseHandler无法覆盖抽象方法onFailture
- Android Html 过滤标签
- java设计模式大话之单例模式
- android 使用xutils3 https详解
- 经济动向g
- 对jsp:useBean 中id属性值,使用${ } 为什么只输出{ }
- CSS两端对齐
- Android读取Word文档
- iOS应用开发入门(3)——点击button控制textview
- eglSwapBuffers接口实现说明
- android 打开 VPN 我找到了源代码却也连不上谁有能用的demo?
- C语言。二分法