package com.rayvan.rosa.library.RosaOs;
import android.os.Handler;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* Created by seceinfofs on 2016/8/10.
*
*
*/
public class RosaHttpClient {
public static final int HTTP_RESPOND_CODE_SUCCESS = 200;
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
private static final int DEFAULT_TIMEOUT = 15; // second
private OkHttpClient okHttpClient = null;
private boolean cookieAvalid = false;
private Handler handler = null;
public interface IHttpClientInterface{
public void callback(int code, boolean success, String response);
}
public RosaHttpClient(){
this(null);
}
public RosaHttpClient(InputStream cert){
this(DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, false, cert);
}
public RosaHttpClient(int connectTimeout, int readTimeout, int writeTimeout,
boolean cookieAvalid, InputStream cert){
init(connectTimeout, readTimeout, writeTimeout, cookieAvalid, cert);
}
public void destroy(){
if(handler != null){
handler.removeCallbacksAndMessages(null);
handler = null;
}
}
private void init(int connectTimeout, int readTimeout, int writeTimeout,
boolean cookieAvalid, InputStream cert){
OkHttpClient.Builder builder = new OkHttpClient().newBuilder()
.connectTimeout(connectTimeout, TimeUnit.SECONDS)
.readTimeout(readTimeout, TimeUnit.SECONDS)
.writeTimeout(writeTimeout, TimeUnit.SECONDS);
if(cookieAvalid) {
buildCookie(builder);
}
if(cert != null){
buildSSLSocketFactory(builder, cert);
}
okHttpClient = builder.build();
handler = new Handler();
}
private void buildCookie(OkHttpClient.Builder builder){
builder.cookieJar(new CookieJar() {
private final HashMap<HttpUrl, List<Cookie>> cookieMap = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieMap.put(url, cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieMap.get(url);
return (cookies != null) ? cookies : new ArrayList<Cookie>();
}
});
}
private void buildSSLSocketFactory(OkHttpClient.Builder builder, InputStream cert) throws IllegalStateException{
try {
/*
* cert -> keyStore -> trustManagerFactory -> trustManagers -> trustManager
* | -> sslContext -> sslSocketFactory
*/
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
keyStore.setCertificateEntry(cert.toString(),certificateFactory.generateCertificate(cert));
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
if ((trustManagers.length != 1) || !(trustManagers[0] instanceof X509TrustManager)) {
throw new IllegalStateException("Unexpected default trust managers:"
+ Arrays.toString(trustManagers));
}
/*KeyStore clientKeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
clientKeyStore.load(mContext.getAssets().open("app_client.bks"), "a12345678".toCharArray());
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(clientKeyStore, "a12345678".toCharArray());*/
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagers, new SecureRandom());
//sslContext.init(keyManagerFactory.getKeyManagers(), trustManagers, new SecureRandom());
builder.hostnameVerifier(new HostnameVerifier(){
@Override
public boolean verify(final String hostname,
final SSLSession session) {
return true;
}
});
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
X509TrustManager trustManager = (X509TrustManager)trustManagers[0];
builder.sslSocketFactory(sslSocketFactory, trustManager);
}catch (CertificateException | NoSuchAlgorithmException | KeyStoreException
| KeyManagementException | IOException e){
e.printStackTrace();
throw new IllegalStateException("Unable to set cert.");
}
}
private Handler getHandler(){
return this.handler;
}
private OkHttpClient getOkHttpClient(){
return okHttpClient;
}
public boolean commit(String url, String json,
IHttpClientInterface iHttpClientInterface, int requestCode){
boolean rc = false;
RequestBody body = buildRequestBody(json);
try {
rc = commit(this, url, body, iHttpClientInterface, requestCode);
}catch (IOException e){
e.printStackTrace();
}
return rc;
}
public boolean commit(String url, String[] keySet, String[] values,
IHttpClientInterface iHttpClientInterface, int requestCode){
boolean rc = false;
RequestBody body = buildRequestBody(keySet, values);
try {
rc = commit(this, url, body, iHttpClientInterface, requestCode);
}catch (IOException e){
e.printStackTrace();
}
return rc;
}
/*
* Note: don't call this in main thread.
*/
public static String commit(String url, String[] keySet, String[] values) throws IOException{
OkHttpClient okHttpClient = new OkHttpClient();
RequestBody body = buildRequestBody(keySet, values);
return commit(okHttpClient, url, body);
}
public static String commit(RosaHttpClient rosaHttpClient, String url, String[] keySet, String[] values) throws IOException{
RequestBody body = buildRequestBody(keySet, values);
return commit(rosaHttpClient.getOkHttpClient(), url, body);
}
public static String commit(String url, String json) throws IOException {
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
https库.rar (7个子文件)
RosaMgrServerProto
Account
LoginRespond.java 1KB
AccountMgr.java 8KB
R3yServerHttpMgr.java 2KB
MsgHdr.java 250B
CommRespond.java 260B
Utils.java 651B
RosaHttpClient.java 12KB
共 7 条
- 1
资源评论
- 夏枯草1232018-08-29没用到,给个3星
Mr_zhaoqiang
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功