精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

免费看成人哺乳视频网站| caoporn97在线视频| 91精品秘密在线观看| 欧美精品一二三区| www.午夜色| 国产高中女学生第一次| 欧美三级不卡| 精品调教chinesegay| 国产黄色特级片| av资源在线观看免费高清| 麻豆成人av在线| 美女少妇精品视频| 污污污www精品国产网站| 国产污视频在线播放| 久久久青草青青国产亚洲免观| 国产精品久久国产精品99gif| 日韩影视一区二区三区| 精品三级国产| 欧美午夜久久久| 午夜欧美一区二区三区免费观看| 国产精品亚洲lv粉色| 国产综合激情| 在线看福利67194| 日本女人黄色片| 国产美女精品写真福利视频| 日本一区二区三区免费乱视频| 成人免费淫片视频软件| 日韩美女视频网站| 91欧美日韩| 亚洲成人久久网| 亚洲欧洲日本精品| 不卡av免费观看| 久久综合色鬼综合色| 国产日韩欧美视频在线| www.99re7.com| 日韩av在线中文字幕| 欧美成人精品福利| 国产高清视频网站| aa级大片免费在线观看| 国产精品久久影院| 精品中文字幕人| 88av在线视频| 日日欢夜夜爽一区| 国外色69视频在线观看| 中日韩一级黄色片| 最新亚洲精品| 亚洲第一精品夜夜躁人人爽| 奇米视频7777| 欧亚一区二区| 一二三四社区欧美黄| 视频一区不卡| 日韩欧美电影在线观看| 国产剧情在线观看一区二区| 51精品国产黑色丝袜高跟鞋| 精品无码m3u8在线观看| 91日韩欧美| 亚洲精品资源在线| 日韩无码精品一区二区| 日韩欧美激情电影| 欧美精品久久久久久久久老牛影院| 欧美 丝袜 自拍 制服 另类| av资源一区| 亚洲精品免费一二三区| 在线综合视频网站| 色综合久久久久综合一本到桃花网| 久久综合九色综合97婷婷女人| 成人av免费电影| 99久久精品国产一区色| 看电视剧不卡顿的网站| 国产精品国语对白| 精品成人久久久| 韩日成人av| 欧美疯狂性受xxxxx另类| 视频国产一区二区| 国产精品久久久久蜜臀 | 久久综合久久综合亚洲| 国产乱码精品一区二区三区卡| 国产免费黄色大片| 国产一区二区三区久久久 | 麻豆精品久久久久久久99蜜桃| 亚洲精品韩国| 91成品人片a无限观看| 男人天堂中文字幕| 99精品视频免费观看| 国内精品免费午夜毛片| wwwwww国产| 老司机精品视频网站| 国产精品va在线播放我和闺蜜| 福利网址在线观看| 日本欧美大码aⅴ在线播放| 韩国视频理论视频久久| 你懂的国产在线| 日韩精品色哟哟| 国产精品永久在线| 国产男女猛烈无遮挡| 国产99久久久国产精品潘金| 国产精品一区二区三区在线观| 天堂av电影在线观看| 国产三级精品视频| 欧美少妇一级片| 激情网站在线| 亚洲电影在线免费观看| 我的公把我弄高潮了视频| 三级在线看中文字幕完整版| 91福利资源站| 最好看的中文字幕| 清纯唯美亚洲经典中文字幕| 在线看日韩欧美| 欧美黑吊大战白妞| 亚洲专区在线| 国产欧美欧洲在线观看| 欧洲成人一区二区三区| 久久蜜桃香蕉精品一区二区三区| 亚洲成年人专区| 免费在线小视频| 欧美日韩国产高清一区二区三区| 岛国精品一区二区三区| 鲁大师精品99久久久| 日韩精品欧美激情| 国产一区第一页| 亚洲美女一区| 国产日韩欧美自拍| 视频一区二区免费| 国产精品久久久久影视| 欧美黑人经典片免费观看| 国产第一亚洲| 精品调教chinesegay| 午夜激情福利网| 久久国产精品久久w女人spa| 91久久大香伊蕉在人线| 国产二区在线播放| 亚洲成人免费电影| 欧美精品成人网| 精品资源在线| 美女撒尿一区二区三区| 无码人妻熟妇av又粗又大| 国产精品一品二品| 亚洲不卡中文字幕| 久久青青色综合| 9191久久久久久久久久久| 国产精品伦子伦| 午夜视频一区| 国产精品一区二区三区在线播放 | 久久激情网站| 成人在线观看av| 欧美69xxx| 色猫猫国产区一区二在线视频| 欧美性猛交xx| 日韩电影二区| 日韩免费av片在线观看| 欧美一区二区公司| 亚洲免费电影在线| 午夜剧场高清版免费观看| 成人黄色av| 午夜精品一区二区三区在线播放 | 国产乱肥老妇国产一区二| 污污网站免费在线观看| 午夜影视日本亚洲欧洲精品| 老女人性生活视频| 重囗味另类老妇506070| 亚洲一区中文字幕| 国产激情小视频在线| 欧美日韩一级片网站| 2019男人天堂| 青青青伊人色综合久久| 日本一区免费观看| 美女福利一区二区 | youjizz在线播放| 日韩欧美亚洲国产一区| 极品白嫩丰满美女无套| 国产乱码精品| 欧美日韩亚洲在线| 成人性生活av| 亚洲日本成人女熟在线观看| 麻豆久久久久久久久久| 久久综合九色欧美综合狠狠| 国产97在线 | 亚洲| 日本成人中文| 欧美在线视频一二三| 日本亚洲欧美| 一本色道久久综合亚洲91| 欧美18—19性高清hd4k| 视频一区欧美精品| 午夜精品亚洲一区二区三区嫩草 | 欧美成人国产| 国产一区二区三区四区五区加勒比 | 亚洲一二三区视频在线观看| 欧美一级片黄色| 美女日韩在线中文字幕| 相泽南亚洲一区二区在线播放| 欧美巨大丰满猛性社交| 亚洲人在线视频| 中文字幕一级片| 亚洲色欲色欲www| 中文字幕亚洲日本| 日韩午夜免费| 欧美综合激情| 国产va免费精品观看精品| 欧美成年人视频| 天天射天天色天天干| 日本二三区不卡| 国产美女高潮视频| 高清shemale亚洲人妖| 超碰网在线观看| 亚洲精品久久久| 精品国产乱码久久久久久88av| videos性欧美另类高清| 日韩风俗一区 二区| 国产精品一区无码| 日韩理论片网站| 亚洲国产第一区| 日本伊人精品一区二区三区观看方式| 中文精品一区二区三区| 青青草原在线亚洲| 成人性教育视频在线观看| 激情黄产视频在线免费观看| 亚洲欧美资源在线| va婷婷在线免费观看| 色网站国产精品| 久久久久亚洲av成人片| 国产三级精品视频| 深田咏美中文字幕| 美腿丝袜一区二区三区| 只有这里有精品| 国产日韩欧美一区二区三区| 99在线观看视频网站| 成人在线爆射| 97精品欧美一区二区三区| av中文字幕一区二区三区| 亚洲精品一区二区三区香蕉| 中文无码av一区二区三区| 亚洲午夜电影在线观看| 欧美一级特黄高清视频| 成人三级在线视频| 成年人在线观看视频免费| 亚洲高清久久| 午夜在线视频免费观看| 九九在线高清精品视频| 成人看片视频| 国产精品视频一区视频二区| 国产精品久久久久久av福利| 欧美办公室脚交xxxx| 欧美高清在线视频观看不卡| 无遮挡的视频在线观看| 亚洲午夜国产成人av电影男同| 内射后入在线观看一区| 91精品国产欧美一区二区| 国产美女www爽爽爽| 日韩人体视频一二区| 日韩高清免费av| 一区二区三区不卡在线观看| 国产免费美女视频| 国产精品电影院| 色欲AV无码精品一区二区久久| 99国产麻豆精品| 精品无码人妻少妇久久久久久| 国产乱人伦偷精品视频不卡| 中文字幕线观看| 日本在线不卡视频| 日韩免费毛片视频| 欧美亚洲在线| wwwxxx黄色片| 小嫩嫩精品导航| 激情婷婷综合网| 日本女优在线视频一区二区| 免费看国产黄色片| 青青草国产成人av片免费| 九色porny91| 日韩 欧美一区二区三区| aa免费在线观看| 日一区二区三区| 国产一区亚洲二区三区| 日本怡春院一区二区| 在线免费观看视频黄| 毛片不卡一区二区| av污在线观看| 九九久久精品视频| 欧美一级小视频| 国产一区二区三区蝌蚪| 日本在线不卡一区二区| 99re视频精品| 白白色免费视频| 国产精品久久久久久久岛一牛影视| 免费在线观看你懂的| 国产丝袜欧美中文另类| 亚洲精品成人av久久| 专区另类欧美日韩| 久久亚洲精品大全| 天天色综合天天| 亚洲图片欧美日韩| 91精品国产综合久久婷婷香蕉| 国产美女明星三级做爰| 亚洲国产成人一区| 国产精品久久久久一区二区国产 | sm国产在线调教视频| 欧美激情视频一区二区| 麻豆mv在线看| 国产综合久久久久| 日韩精品一区二区三区中文字幕| 国产日韩一区二区三区| 国产成人手机高清在线观看网站| 亚洲一卡二卡三卡| 国内揄拍国内精品久久| 大香煮伊手机一区| 美女国产一区二区三区| 日本在线播放一区二区| 成人免费精品视频| 久久精品无码一区| 一区二区三区日韩精品| 最新中文字幕一区| 51精品国自产在线| 秋霞网一区二区| 在线视频免费一区二区| 欧美人与性动交α欧美精品济南到 | 国产91免费看片| 日韩一区网站| 日韩欧美亚洲日产国产| 国内成人在线| 午夜免费看毛片| 久久综合九色综合欧美就去吻 | 国产一区毛片| 日本老太婆做爰视频| 日韩精品高清不卡| www.男人天堂| 亚洲精品日韩一| 国产麻豆免费观看| 色黄久久久久久| 日韩天堂在线| 品久久久久久久久久96高清| 99热精品在线| 91精品小视频| 精品日韩美女的视频高清| 亚洲第一天堂影院| 欧美成人一二三| 国产专区精品| 日韩精品一区二区三区电影| 久久国产视频网| 永久免费看片视频教学| 欧美精品一二三| 超碰porn在线| 亚洲永久免费观看| 欧美一区不卡| 少妇精品无码一区二区| 亚洲国产日韩在线一区模特| 国精产品乱码一区一区三区四区| 欧美大片免费看| 好吊妞国产欧美日韩免费观看网站| 老子影院午夜伦不卡大全| 国产成人丝袜美腿| 黄色一级片在线免费观看| 精品免费国产一区二区三区四区| 麻豆蜜桃在线| 麻豆精品蜜桃一区二区三区| 亚洲一区二区三区高清| 国产精品成人一区二区三区电影毛片| 欧美日韩在线免费观看| 蜜桃免费在线| 国产精品自产拍高潮在线观看| 香蕉国产精品| 精品人妻人人做人人爽夜夜爽| 一区二区欧美国产| 无码国产精品一区二区色情男同 | 国产天堂视频在线观看| 成人深夜在线观看| yjizz国产| 中文字幕欧美日韩va免费视频| 日韩午夜视频在线| 成人毛片100部免费看| 99re热这里只有精品视频| 波多野结衣小视频| 久久久精品免费| 国产精品巨作av| 男人搞女人网站| 亚洲柠檬福利资源导航| 手机在线精品视频| 国产精品久久二区| 好吊日精品视频| 欧美人妻一区二区三区| 日韩午夜av电影| 国产精品高清乱码在线观看| 日本特级黄色大片| 成人激情黄色小说| 性高潮视频在线观看| 久久97久久97精品免视看| 免费成人av| 又黄又爽又色的视频| 五月综合激情日本mⅴ| av资源在线观看免费高清| 国产精品播放| 热久久一区二区| 国产在线综合网| 中文字幕不卡av| 国产suv精品一区| 亚洲欧美自拍另类日韩| 亚洲va国产天堂va久久en| 伊人免费在线| 久久青青草原| 国产精品亚洲成人| 成人免费一级片| 97香蕉久久夜色精品国产|