OKHttp的常用配置如配置Https證書,忽略Https證書,Cookie持久化

Retrofit應(yīng)該是目前最火的聯(lián)網(wǎng)框架,但是內(nèi)部還是使用的OKHttp,在這總結(jié)一下常用的配置。

  1. 做Cookie的持久化。 OKHttp3.0之后和之前做Cookie持久化有了點(diǎn)區(qū)別下面直接上代碼:
.cookieJar(new CookieJar() { 
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>(); 
@Override 
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) { cookieStore.put(url.host(), cookies); } 
@Override 
public List<Cookie> loadForRequest(HttpUrl url) {
 List<Cookie> cookies = cookieStore.get(url.host()); 
return cookies != null ? cookies : new ArrayList<Cookie>(); } })```
2.添加Https證書 - 初始化SSLContext 

public static void setCard(InputStream certificate) {
try {
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null);
String certificateAlias = Integer.toString(0); keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate));
sslContext = SSLContext.getInstance("TLS");
final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
sslContext.init ( null, trustManagerFactory.getTrustManagers(), new SecureRandom() );
} catch (CertificateException e)
{
e.printStackTrace();
}
catch (KeyStoreException e) {
e.printStackTrace(); }
catch (NoSuchAlgorithmException e)
{ e.printStackTrace(); }
catch (IOException e) {
e.printStackTrace(); }
catch (KeyManagementException e)
{ e.printStackTrace(); } }```

  • 通過構(gòu)造者模式添加至OKHttpClient
.sslSocketFactory(sslContext.getSocketFactory()) .hostnameVerifier(new HostnameVerifier() { 
@Override
 public boolean verify(String hostname, SSLSession session) { 
return true; } })

3 . 忽略Https證書

/** * 忽略所有https證書 */
 private void overlockCard() {
 final TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() { 
@Override
 public void checkClientTrusted( 
java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }
 @Override 
public void checkServerTrusted( java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }
 @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
X509Certificate[] x509Certificates = new X509Certificate[0]; return x509Certificates; } }};
 try {
 sslContext = SSLContext.getInstance("SSL"); 
sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); } 
catch (Exception e) {
 LogUtil.e("ssl出現(xiàn)異常"); } }```
最終關(guān)于整個(gè)Okhttp的配置模塊:

private static final String CER_NAME = ""; //https簽名證書name
if (StringUtils.isEmpty(CER_NAME)) {
//忽略所有證書
overlockCard(); } else {
//選擇證書
try {
setCard(UIUtils.getContext().getAssets().open(CER_NAME)); }
catch (IOException e) {
e.printStackTrace(); } }
okHttpClient = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .sslSocketFactory(sslContext.getSocketFactory()) .hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true; } }) .cookieJar(new CookieJar() {
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) { cookieStore.put(url.host(), cookies); }
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<Cookie>(); } }) .build();```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,625評論 18 399
  • 1、不安全的隨機(jī)數(shù)生成,在CSRF TOKEN生成、password reset token生成等,會造成toke...
    nightmare丿閱讀 3,990評論 0 1
  • 1.自定義X509TrustManager在使用HttpsURLConnection發(fā)起 HTTPS 請求的時(shí)候,...
    SDY_0656閱讀 3,609評論 0 0
  • 在闡述我對這個(gè)問題的觀點(diǎn)前,先寫兩個(gè)問題 戰(zhàn)國人民問現(xiàn)代人民:汝需竹簡乎?吾可助記之?,F(xiàn)代人民問未來人民:你需要紙...
    ketchupyan閱讀 2,480評論 3 8
  • 首先做個(gè)知識點(diǎn)的普及:相信大家都清楚在 Android 中有一個(gè)** AndroidManifest.xml **...
    Android_YangKe閱讀 1,008評論 0 7

友情鏈接更多精彩內(nèi)容