精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android網絡--我是怎么做的: Volley+OkHttp+Https

移動開發
Volley 已經發布很長時間了, 也已被廣泛應用, 相關教程到處都是. 本文只說兩個值得注意的地方. 本文講解部分比較少, 請參閱提供的相關鏈接. 完整的實現代碼在 Github dodocat/AndroidNetworkDemo 可能看起來比這里更清晰.

使用 OkHttp 作為傳輸層的實現.

Volley 默認根據 Android 系統版本使用不同的 Http 傳輸協議實現.
在 Android 3.0 以上 Volley 使用 ApacheHttpStack 作為傳輸協議, 在2.3 及以下使用 HttpURLConnection 作為傳輸層協議

OkHttp 相較于其它的實現有以下的優點.

  • 支持SPDY,允許連接同一主機的所有請求分享一個socket。
  • 如果SPDY不可用,會使用連接池減少請求延遲。
  • 使用GZIP壓縮下載內容,且壓縮操作對用戶是透明的。
  • 利用響應緩存來避免重復的網絡請求。
  • 當網絡出現問題的時候,OKHttp會依然有效,它將從常見的連接問題當中恢復。
  • 如果你的服務端有多個IP地址,當第一個地址連接失敗時,OKHttp會嘗試連接其他的地址,這對IPV4和IPV6以及寄宿在多個數據中心的服務而言,是非常有必要的。

因此使用 OkHttp 作為替代是好的選擇.

  1. 先用 OkHttp 實現一個新的 HurlStack 用于構建 Volley 的 requestQueue.

    1. public class OkHttpStack extends HurlStack { 
    2.  
    3.  private OkHttpClient okHttpClient; 
    4.  
    5.  /** 
    6.   * Create a OkHttpStack with default OkHttpClient. 
    7.   */ 
    8.  public OkHttpStack() { 
    9.      this(new OkHttpClient()); 
    10.  } 
    11.  
    12.  /** 
    13.   * Create a OkHttpStack with a custom OkHttpClient 
    14.   * @param okHttpClient Custom OkHttpClient, NonNull 
    15.   */ 
    16.  public OkHttpStack(OkHttpClient okHttpClient) { 
    17.      this.okHttpClient = okHttpClient; 
    18.  } 
    19.  
    20.  @Override 
    21.  protected HttpURLConnection createConnection(URL url) throws IOException { 
    22.      OkUrlFactory okUrlFactory = new OkUrlFactory(okHttpClient); 
    23.      return okUrlFactory.open(url); 
    24.  } 
  2. 然后使用 OkHttpStack 創建新的 Volley requestQueue.

    1. requestQueue = Volley.newRequestQueue(getContext(), new OkHttpStack()); 
    2. requestQueue.start(); 

    這樣就行了.

使用 Https

作為一個有節操的開發者應該使用 Https 來保護用戶的數據, Android 開發者網站上文章Security with HTTPS and SSL做了詳盡的闡述.

OkHttp 自身是支持 Https 的. 參考文檔 OkHttp Https, 直接使用上面的 OkHttpStack就可以了, 但是如果遇到服務器開發哥哥使用了自簽名的證書(不要問我為什么要用自簽名的), 就無法正常訪問了.

網上有很多文章給出的方案是提供一個什么事情都不做的TrustManager 跳過 SSL 的驗證, 這樣做很容受到攻擊, Https 也就形同虛設了.

我采用的方案是將自簽名的證書打包入 APK 加入信任.

好處:

  • 應用難以逆向, 應用不再依賴系統的 trust store, 使得 Charles 抓包等工具失效. 要分析應用 API 必須反編譯 APK.
  • 不用額外購買證書, 省錢....

缺點:

  • 證書部署靈活性降低, 一旦變更證書必須升級程序.

實現步驟

以最著名的自簽名網站12306為例說明

  1. 導出證書

    1. echo | openssl s_client -connect kyfw.12306.cn:443 2>&1 |  sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > kyfw.12306.cn.pem 
  2. 將證書轉為 bks 格式
    下載最新的bcprov-jdk, 執行下面的命令. storepass 是導出密鑰文件的密碼.

    1. keytool -importcert -v \ 
    2.  -trustcacerts \ 
    3.  -alias 0 \ 
    4.  -file <(openssl x509 -in kyfw.12306.cn.pem) \ 
    5.  -keystore $CERTSTORE -storetype BKS \ 
    6.  -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider \ 
    7.  -providerpath ./bcprov-jdk16-1.46.jar \ 
    8.  -storepass asdfqaz 
  3. 將導出的 kyfw.bks 文件放入 res/raw 文件夾下.

  4. 創建 SelfSignSslOkHttpStack

    1. /** 
    2. * A HttpStack implement witch can verify specified self-signed certification. 
    3. */ 
    4. public class SelfSignSslOkHttpStack extends HurlStack { 
    5.  
    6.  private OkHttpClient okHttpClient; 
    7.  
    8.  private Map<String, SSLSocketFactory> socketFactoryMap; 
    9.  
    10.  /** 
    11.   * Create a OkHttpStack with default OkHttpClient. 
    12.   */ 
    13.  public SelfSignSslOkHttpStack(Map<String, SSLSocketFactory> factoryMap) { 
    14.      this(new OkHttpClient(), factoryMap); 
    15.  } 
    16.  
    17.  /** 
    18.   * Create a OkHttpStack with a custom OkHttpClient 
    19.   * @param okHttpClient Custom OkHttpClient, NonNull 
    20.   */ 
    21.  public SelfSignSslOkHttpStack(OkHttpClient okHttpClient, Map<String, SSLSocketFactory> factoryMap) { 
    22.      this.okHttpClient = okHttpClient; 
    23.      this.socketFactoryMap = factoryMap; 
    24.  } 
    25.  
    26.  @Override 
    27.  protected HttpURLConnection createConnection(URL url) throws IOException { 
    28.      if ("https".equals(url.getProtocol()) && socketFactoryMap.containsKey(url.getHost())) { 
    29.          HttpsURLConnection connection = (HttpsURLConnection) new OkUrlFactory(okHttpClient).open(url); 
    30.          connection.setSSLSocketFactory(socketFactoryMap.get(url.getHost())); 
    31.          return connection; 
    32.      } else { 
    33.          return  new OkUrlFactory(okHttpClient).open(url); 
    34.      } 
    35.  } 
  5. 然后用 SelfSignSslOkHttpStack 創建 Volley 的 RequestQueue.

    1. String[] hosts = {"kyfw.12306.cn"}; 
    2.  int[] certRes = {R.raw.kyfw}; 
    3.  String[] certPass = {"asdfqaz"}; 
    4.  socketFactoryMap = new Hashtable<>(hosts.length); 
    5.  
    6.  for (int i = 0; i < certRes.length; i++) { 
    7.      int res = certRes[i]; 
    8.      String password = certPass[i]; 
    9.      SSLSocketFactory sslSocketFactory = createSSLSocketFactory(context, res, password); 
    10.      socketFactoryMap.put(hosts[i], sslSocketFactory); 
    11.  } 
    12.  
    13.  HurlStack stack = new SelfSignSslOkHttpStack(socketFactoryMap); 
    14.  
    15.  requestQueue = Volley.newRequestQueue(context, stack); 
    16.  requestQueue.start(); 
  6. 我們來試一試, 用上一步穿件的 RequestQueue 替換掉原來的, 然后發請求試試.

    1. StringRequest request = new StringRequest( 
    2.             Request.Method.GET, 
    3.             "https://kyfw.12306.cn/otn/"
    4.             new Response.Listener<String>() { 
    5.                 @Override 
    6.                 public void onResponse(String response) { 
    7.                     responseContentTextView.setText(response); 
    8.                 } 
    9.             }, 
    10.             new Response.ErrorListener() { 
    11.                 @Override 
    12.                 public void onErrorResponse(VolleyError error) { 
    13.                     responseContentTextView.setText(error.toString()); 
    14.                 } 
    15.             }); 
    16.     RequestManager.getInstance(this).addRequest(request, this); 
  7. done

責任編輯:倪明 來源: 簡書
相關推薦

2012-05-24 14:58:55

開源代碼

2011-03-11 09:53:46

FacebookMySQL

2017-07-20 13:11:46

Code ReviewPR評審

2024-01-04 08:49:03

Vuescope限制

2016-01-05 16:17:59

云夢數據倉

2018-01-08 14:18:14

代碼互聯網持續集成

2015-07-22 11:35:26

2022-03-10 11:25:51

InnoDB優化

2023-09-27 22:44:18

數據遷移數據庫

2021-07-07 12:36:10

HTTPSSSL通信

2017-10-25 09:50:51

Linux

2021-05-13 07:32:17

培訓代碼同事

2019-09-10 09:25:27

分布式系統Elasticsear

2024-12-04 10:47:26

2016-09-21 10:18:26

阿里Dubbo性能測試

2021-05-05 10:48:33

滲透測試漏洞網絡攻擊

2022-08-23 14:51:37

網絡安全領導層存儲

2017-01-12 20:19:37

AndroidContext開發

2019-08-12 08:57:27

HTTPS HTTP網絡協議

2012-11-28 01:47:35

軟件測試測試
點贊
收藏

51CTO技術棧公眾號

亚洲精品第五页| 青娱乐国产在线| 日韩欧美2区| 自拍偷拍欧美激情| 精品国产一二| 中国黄色一级视频| 国产精品s色| 亚洲欧美日韩网| 51自拍视频在线观看| 在线视频cao| 1区2区3区精品视频| 国产伦精品一区二区三区在线| 少妇无套内谢久久久久| 激情91久久| 自拍偷拍亚洲欧美| 久久久高清视频| 日本a人精品| 偷拍日韩校园综合在线| 亚洲巨乳在线观看| 偷拍25位美女撒尿视频在线观看| 毛片av一区二区| 性色av一区二区三区在线观看| jizz日本在线播放| 偷窥自拍亚洲色图精选| 日韩一区二区三区观看| 国产又黄又猛又粗又爽的视频| 国产美女一区视频| ...xxx性欧美| 日韩免费中文专区| 视频一区二区三区在线看免费看| 国产一区二区91| 国产精品日韩精品| 亚洲第一在线播放| 黄页网站一区| 欧美人在线视频| 国产尤物在线播放| 日韩精品二区| 一本大道亚洲视频| 欧美精品欧美极品欧美激情| 日本一区二区三区视频在线看| 日本高清不卡一区| 精品久久一二三| 成人超碰在线| 亚洲一级二级在线| 欧美人与动牲交xxxxbbbb| 黄色动漫在线观看| 亚洲图片你懂的| 一区二区三区四区视频在线观看| 国产高清美女一级毛片久久| 久久午夜免费电影| 欧美精品与人动性物交免费看| 好吊色在线观看| 粉嫩aⅴ一区二区三区四区| 亚洲精品欧美日韩专区| 99在线精品视频免费观看20| 国产最新精品免费| 亚洲va欧美va国产综合剧情| 国产视频在线观看免费| 国产精品一区二区黑丝| 91视频网页| 成人午夜视频一区二区播放| 懂色av一区二区三区蜜臀| 国产精品乱子乱xxxx| 欧美一级性视频| 99热精品国产| 欧美精品v日韩精品v国产精品| 香蕉视频911| 久久麻豆一区二区| 日韩中文一区二区三区| 日本亚洲精品| 亚洲乱码日产精品bd| 日本a级片在线播放| 国产又色又爽又黄刺激在线视频| 舔着乳尖日韩一区| 日韩欧美xxxx| www.欧美视频| 亚洲第一区第二区| 91精品国自产在线| 亚洲成av人电影| 午夜精品福利在线观看| 久久精品视频2| 韩国理伦片一区二区三区在线播放| 91九色视频在线观看| 欧美特黄一级视频| 国产片一区二区三区| 免费成人深夜夜行网站视频| 激情国产在线| 欧美日韩视频在线观看一区二区三区 | 国产裸体视频网站| 9l亚洲国产成人精品一区二三| 日韩精品在线观| 91香蕉视频污在线观看| 精品99视频| 国产精品欧美一区二区| 亚洲国产999| 国产视频一区在线观看 | 影音先锋日韩资源| 国产精品久久久久久久久男| 午夜老司机福利| 国产日产精品1区| 国产成人一二三区| 8av国产精品爽爽ⅴa在线观看| 欧美一级免费大片| 好吊视频在线观看| 狠狠色狠狠色综合日日tαg| 国产精品久久久久9999| 日韩一区免费视频| 中文字幕五月欧美| 欧美 日韩 国产一区| 亚洲三级在线| 日韩高清av一区二区三区| 久久av红桃一区二区禁漫| 国产精品美女久久久浪潮软件| 国产在线精品一区免费香蕉| 天天综合在线视频| 一区二区三区四区在线播放 | 黄色www在线观看| xx欧美xxx| 精品国产一区二区精华| 精品无码一区二区三区蜜臀| 老司机精品视频网站| 国产精品免费一区二区三区观看| 永久免费在线观看视频| 欧美天堂在线观看| aaaa黄色片| 欧美日韩国产精品一区二区亚洲| 国产精品入口免费视| 亚洲av成人精品日韩在线播放| 怡红院av一区二区三区| 国产高清999| 欧美a级片视频| 国产精品黄色av| 免费a级毛片在线观看| 亚洲福利视频一区二区| 亚洲911精品成人18网站| 香蕉视频国产精品| 成人亲热视频网站| 欧美jizz18性欧美| 欧美日韩国产高清一区二区三区| 欧美熟妇激情一区二区三区| 久久久久久久欧美精品| 蜜桃999成人看片在线观看| www.九色在线| 日韩成人性视频| 尤物视频在线观看国产| 国产成人精品影视| www.亚洲成人网| 亚洲图色一区二区三区| 欧美黄网免费在线观看| 亚洲AV午夜精品| 亚洲香肠在线观看| 北京富婆泄欲对白| 国产日韩1区| 欧美精品欧美精品| 另类激情视频| 综合国产在线观看| 国产日本精品视频| 有码一区二区三区| 欧美一区二区免费在线观看| 国产一区91| 欧美日韩高清在线一区| av在线一区不卡| 日韩午夜在线视频| 性一交一乱一伧老太| 亚洲超碰精品一区二区| 菠萝菠萝蜜网站| 老牛国产精品一区的观看方式| 亚洲精品一区二区三| 国产精品亚洲欧美日韩一区在线| 蜜月aⅴ免费一区二区三区| 俄罗斯嫩小性bbwbbw| 欧美日韩国产精品| 2019男人天堂| 国产美女视频91| 欧美视频在线免费播放| 国产一区二区三区电影在线观看| 国产日韩精品在线观看| 污视频在线看网站| 亚洲欧美另类中文字幕| 一级α片免费看刺激高潮视频| 亚洲乱码国产乱码精品精98午夜 | 国产一区99| 91精品视频大全| 538在线精品| 中文字幕亚洲综合| www.好吊色| 日韩欧美在线字幕| 免费在线黄色网| 久久综合久久久久88| 91精品999| 99热这里只有精品8| 亚洲精品欧美精品| 国产福利资源一区| 国产精品一区二区久久久久| 男女在线观看视频| 中文字幕综合在线| 天天干天天爱天天操| 在线成人av网站| 你懂的国产在线| 亚洲精品视频一区二区| 亚洲自拍偷拍精品| 国模少妇一区二区三区| 免费观看精品视频| 午夜久久99| 亚洲狠狠婷婷综合久久久| 成人福利一区| 成人网欧美在线视频| 伊人久久视频| 欧美精品videossex性护士| av网站在线播放| 日韩二区三区在线| 黄频网站在线观看| 欧美一级日韩不卡播放免费| 人妻中文字幕一区二区三区| 欧美日韩午夜视频在线观看| 久久高清内射无套| 国产日本一区二区| 日韩网站在线播放| 国产.欧美.日韩| 国产探花在线观看视频| 日韩国产精品久久久| 欧美爱爱视频免费看| 欧美日韩免费| 9999在线观看| 久久一区二区中文字幕| 日韩av电影免费播放| 网曝91综合精品门事件在线| 国产精品国模大尺度私拍| 999色成人| 成人网址在线观看| 狂野欧美性猛交xxxx| 国产成人精品免高潮在线观看 | 欧美日韩国产在线一区| 一级做a爰片久久| 成人激情视频| 日韩欧美一区二区三区四区五区| 欧美做受69| 精品久久久久久乱码天堂| 97一区二区国产好的精华液| 亚洲mm色国产网站| 国产欧美日韩电影| 91麻豆桃色免费看| 国产精品高清一区二区| 91精品久久久久久久久久另类| 成人国产精品入口免费视频| 国产精品福利小视频| 在线一区视频观看| 国产精品免费一区豆花| 国产亚洲精品精品国产亚洲综合| 国产精品www色诱视频| 日韩精选视频| 国产精品视频在线观看| 亚洲欧美专区| 亚洲一区二区在线播放| 91精品国产自产精品男人的天堂| av免费精品一区二区三区| 福利片一区二区| 久久精品丝袜高跟鞋| 国产一区不卡| 亚洲精品视频一区二区三区| 99久久99久久精品国产片果冰| 中文字幕在线观看一区二区三区| 亚洲欧美色图| a级黄色小视频| 欧美专区18| 高清av免费看| 国产福利精品一区| 玖草视频在线观看| 国产欧美精品一区| 国产黄色的视频| 亚洲国产综合91精品麻豆| 国产乱国产乱老熟| 欧美乱妇20p| 亚洲免费成人在线| 亚洲视频日韩精品| 麻豆免费在线视频| 97精品国产97久久久久久免费| 二区三区不卡| 成人欧美一区二区三区在线湿哒哒 | 婷婷五月在线视频| 欧美激情亚洲自拍| 欧美电影免费观看高清完整| 成人激情在线播放| 欧美国产极品| 伊人狠狠色丁香综合尤物| 在线播放一区| 中文字幕亚洲乱码| 成人黄页在线观看| wwwww黄色| 亚洲v中文字幕| 一级做a爰片久久毛片16| 精品国产91洋老外米糕| av免费在线一区二区三区| 欧美激情国产精品| 欧美日韩免费观看视频| 99久久精品免费看国产一区二区三区| 日本午夜精品| 日韩精品福利片午夜免费观看| 亚洲女优在线| 丰满饥渴老女人hd| 国产免费成人在线视频| 国产午夜小视频| 欧美精品第一页| 美丽的姑娘在线观看免费动漫| 美乳少妇欧美精品| 成人在线网站| 精品久久久久久乱码天堂| 欧美福利影院| 欧美一级视频在线| 久久精品免费在线观看| 久久久久久久99| 欧美成人伊人久久综合网| 在线看黄色av| 国产999在线| 欧亚精品一区| 男人天堂av片| 国产乱码精品一区二区三区忘忧草 | 国产精品拍拍拍| www国产成人| 日本熟妇一区二区| 精品人在线二区三区| 日本a在线播放| 国产精品久久久久久亚洲调教| 日韩影视高清在线观看| 国产片侵犯亲女视频播放| 国产美女娇喘av呻吟久久| 国产黄色录像视频| 日本精品视频一区二区三区| 少妇人妻精品一区二区三区| 蜜臀久久99精品久久久久久宅男| 91成人精品观看| 一区二区日本伦理| 久久99久久久久久久久久久| 国产精品18在线| 欧美久久久久久久久中文字幕| 91精品国产综合久久久久久豆腐| 日本精品久久久| 一道在线中文一区二区三区| 日日橹狠狠爱欧美超碰| 91一区二区在线观看| 亚洲高清毛片一区二区| 亚洲毛片在线看| 欧美成人ⅴideosxxxxx| 欧美日韩综合精品| 日本不卡的三区四区五区| 性欧美一区二区| 欧美性三三影院| 秋霞a级毛片在线看| 国产精品色视频| 国产精品videosex性欧美| www.五月天色| 亚洲伦在线观看| 天堂网在线中文| 51久久精品夜色国产麻豆| 亚洲福利天堂| 国产wwwxx| 亚洲视频在线一区| 丰满人妻一区二区三区免费视频 | 日本老太婆做爰视频| 国产精品一区二区三区乱码| 久久久久亚洲AV| 精品无人国产偷自产在线| 性高爱久久久久久久久| 一区二区三区国产福利| 国产精品1区2区3区在线观看| 国产无遮挡免费视频| 亚洲精品自拍偷拍| 国产经典一区| japanese在线播放| 91亚洲精品久久久蜜桃| 欧美在线视频精品| 免费不卡欧美自拍视频| 久久精品亚洲成在人线av网址| 成人在线免费播放视频| 亚洲女厕所小便bbb| 色在线免费视频| 国产欧美韩国高清| 精品1区2区3区4区| 91网站免费视频| 日韩欧美一级在线播放| av高清不卡| a级网站在线观看| 99久久777色| 国产又粗又猛视频| 91超碰中文字幕久久精品| 色琪琪久久se色| 久久久午夜精品福利内容| 欧美日韩日本视频| 成人影音在线| 一区二区视频国产| 不卡电影一区二区三区| 国产尤物在线观看| 欧美专区日韩视频| 欧美精品国产| 欧洲性xxxx| 亚洲精品久久久一区二区三区| 欧美jizz18| 国产成人精品无码播放| 亚洲精品日韩一| av电影在线网|