先插一句。Google出的volley框架本身是支持https请求的,可是仅仅是针对有第三方机构认证过的。

假设自己随便在网上搞的一个证书,那volley是不支持请求的。

本文讲下怎样让volley支持自己搞的https证书。

改动volley源代码:com.android.myvolley.toolbox.HurlStack

  1. /**
  2. * Create an {@link HttpURLConnection} for the specified {@code url}.
  3. */
  4. protected HttpURLConnection createConnection(URL url) throws IOException {
  5. if (url.toString().contains("https")) {
  6. MyHttpsManager.allowAllSSL();
  7. }
  8. return (HttpURLConnection) url.openConnection();
  9. }

在HurlStack类中的createConnection方法中,做个过滤处理:

  1. if (url.toString().contains("https")) {
  2. MyHttpsManager.allowAllSSL();
  3. }

直接贴代码啦。

  1. import java.security.KeyManagementException;
  2. import java.security.NoSuchAlgorithmException;
  3. import java.security.SecureRandom;
  4. import java.security.cert.CertificateException;
  5. import java.security.cert.X509Certificate;
  6.  
  7. import javax.net.ssl.HostnameVerifier;
  8. import javax.net.ssl.HttpsURLConnection;
  9. import javax.net.ssl.SSLContext;
  10. import javax.net.ssl.SSLSession;
  11. import javax.net.ssl.TrustManager;
  12. import javax.net.ssl.X509TrustManager;
  13.  
  14. public class MyHttpsManager implements X509TrustManager {
  15. private static TrustManager[] trustManagers;
  16.  
  17. @Override
  18. public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
  19.  
  20. }
  21.  
  22. @Override
  23. public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
  24.  
  25. }
  26.  
  27. @Override
  28. public X509Certificate[] getAcceptedIssuers() {
  29. return new X509Certificate[0];
  30. }
  31.  
  32. public static void allowAllSSL() {
  33. HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
  34.  
  35. @Override
  36. public boolean verify(String arg0, SSLSession arg1) {
  37. // TODO Auto-generated method stub
  38. return true;
  39. }
  40.  
  41. });
  42.  
  43. SSLContext context = null;
  44. if (trustManagers == null) {
  45. trustManagers = new TrustManager[] { new MyHttpsManager() };
  46. }
  47.  
  48. try {
  49. context = SSLContext.getInstance("TLS");
  50. context.init(null, trustManagers, new SecureRandom());
  51. } catch (NoSuchAlgorithmException e) {
  52. e.printStackTrace();
  53. } catch (KeyManagementException e) {
  54. e.printStackTrace();
  55. }
  56.  
  57. HttpsURLConnection.setDefaultSSLSocketFactory(context
  58. .getSocketFactory());
  59. }
  60. }

然后请求的时候在头里面加个什么鬼id。sign之类的,就能够和服务端通信了。

比如volley重写getHeaders方法:

  1. public void sendRequest(int method, String url, JSONObject jsonRequest, final String sessionToken, final OnResponseListener listener,final OnErrorListener errorListener) {
  2. initUserAgent();
  3.  
  4. JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(method, url, jsonRequest, new Response.Listener<JSONObject>() {
  5. @Override
  6. public void onResponse(JSONObject response) {
  7. listener.onResponse(response);
  8. }
  9.  
  10. }, new Response.ErrorListener() {
  11. @Override
  12. public void onErrorResponse(VolleyError error) {
  13. errorListener.onErrorResponse(error);
  14. }
  15. }){
  16. @Override
  17. public Map<String, String> getHeaders() throws AuthFailureError {
  18. HashMap<String, String> headers = new HashMap<String,String>();
  19. headers.put("Content-Type", "application/json");
  20. headers.put("x-app-id", APPID);
  21. headers.put("x-app-sign",SIGN);
  22. headers.put("x-session-token",sessionToken);
  23. headers.put("User-Agent",userAgent);
  24. return headers;
  25. }
  26. };
  27.  
  28. Volley.newRequestQueue(context).add(jsonObjectRequest);
  29. }

Google Volley框架之https请求的更多相关文章

  1. Volley框架支持HTTPS请求。

    第一次写帖子,嘿嘿. 最近了解到google2013IO大会出了个网络框架,正好项目也需要用到,就看了下. 最后发现接口都是HTTPS的,但是Volley默认是不支持HTTPS,网上找了好久,都没有对 ...

  2. Google Volley框架源码走读

      PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanb ...

  3. Volley框架之网络请求和图片加载

    Volley是 Google 推出的 Android 异步网络请求框架和图片加载框架. Volley的特性 (1).封装了的异步的请求API.Volley 中大多是基于接口的设计,可配置性强.(2). ...

  4. 035 Android Volley框架进行网络请求

    1.volley入门介绍 开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通 ...

  5. Volley框架实现Http的get和post请求

    一: volley简介: Google I/O 2013上,Volley发布了.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.这是Volley名称的由来: a bu ...

  6. 安卓中自定义并使用Volley框架请求网络

    大家好,今天我们讲一下如何使用Volley框架请求网络,为何要使用Volley框架,这就要先说一下使用Volley框架请求网络的优点了,volley是易于定制的,即你可以根据需求来设定volley框架 ...

  7. 【安卓网络请求开源框架Volley源码解析系列】定制自己的Request请求及Volley框架源码剖析

    通过前面的学习我们已经掌握了Volley的基本用法,没看过的建议大家先去阅读我的博文[安卓网络请求开源框架Volley源码解析系列]初识Volley及其基本用法.如StringRequest用来请求一 ...

  8. Android框架Volley之:ImageRequest请求实现图片加载

    首先我们在项目中导入这个框架: implementation 'com.mcxiaoke.volley:library:1.0.19' 在AndroidManifest文件当中添加网络权限: < ...

  9. Android框架Volley使用:Json请求实现

    首先我们在项目中导入这个框架: implementation 'com.mcxiaoke.volley:library:1.0.19' 在AndroidManifest文件当中添加网络权限: < ...

随机推荐

  1. 算法:基于 RingBuffer 的 Queue 实现《续》

    背景 上篇实现了一个简单的队列,内部使用了 _count 计数,本文采用另外一种模式,不用 _count 计数. RingBuffer 不用 _count 计数的话,为了区分队列的满和空,需要在数组中 ...

  2. Selenium2+python自动化58-读取Excel数据(xlrd)

    前言 当登录的账号有多个的时候,我们一般用excel存放测试数据,本节课介绍,python读取excel方法,并保存为字典格式. 一.环境准备 1.先安装xlrd模块,打开cmd,输入pip inst ...

  3. 分割流 SequenceInputStream (转)

    import java.io.*;import java.util.*; class SplitFile{ public static void main(String[] args) throws ...

  4. Tomcat启动就执行特定方法

    import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContex ...

  5. 《Windows核心编程》第十一章——线程池

    隐式使用工作项 #include <iostream> #include <windows.h> ; VOID NTAPI SimpleCallback(PTP_CALLBAC ...

  6. Android NDK开发篇(五):Java与原生代码通信(数据操作)

    尽管说使用NDK能够提高Android程序的运行效率,可是调用起来还是略微有点麻烦.NDK能够直接使用Java的原生数据类型,而引用类型,由于Java的引用类型的实如今NDK被屏蔽了,所以在NDK使用 ...

  7. Flume NG 配置详解(转)

    原文链接:[转]Flume NG 配置详解 (说明,名词对应解释 源-Source,接收器-Sink,通道-Channel) 配置 设置代理 Flume代理配置存储在本地配置文件.这是一个文本文件格式 ...

  8. 第十二章 springboot + mongodb(复杂查询)

    简单查询:使用自定义的XxxRepository接口即可.(见 第十一章 springboot + mongodb(简单查询)) 复杂查询:使用MongoTemplate以及一些查询条件构建类(Bas ...

  9. angular之interceptors拦截器

    <!DOCTYPE html> <html ng-app="nickApp"> <head> <meta charset="UT ...

  10. 10个最好的 jQuery 视频插件

    在这篇文章中已经收集了10个最佳的jQuery视频插件,帮助开发人员容易地实现网站播放影片功能.可以显示视频和视频播放列表. 1. Bigvideo.js BigVideo.js 是一个jQuery插 ...