Google Volley框架之https请求

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

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

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

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

   /**
     * Create an {@link HttpURLConnection} for the specified {@code url}.
     */
    protected HttpURLConnection createConnection(URL url) throws IOException {
        if (url.toString().contains("https")) {
            MyHttpsManager.allowAllSSL();
        }
        return (HttpURLConnection) url.openConnection();
    }

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

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

直接贴代码啦。

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class MyHttpsManager implements X509TrustManager {
    private static TrustManager[] trustManagers;

    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {

    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {

    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }

    public static void allowAllSSL() {
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {

            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                // TODO Auto-generated method stub
                return true;
            }

        });

        SSLContext context = null;
        if (trustManagers == null) {
            trustManagers = new TrustManager[] { new MyHttpsManager() };
        }

        try {
            context = SSLContext.getInstance("TLS");
            context.init(null, trustManagers, new SecureRandom());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }

        HttpsURLConnection.setDefaultSSLSocketFactory(context
                .getSocketFactory());
    }
}

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

比如volley重写getHeaders方法:

public void sendRequest(int method, String url, JSONObject jsonRequest, final String sessionToken, final OnResponseListener listener,final OnErrorListener errorListener) {
        initUserAgent();

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(method, url, jsonRequest, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                listener.onResponse(response);
            }

        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                errorListener.onErrorResponse(error);
            }
        }){
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String,String>();
                headers.put("Content-Type", "application/json");
                headers.put("x-app-id", APPID);
                headers.put("x-app-sign",SIGN);
                headers.put("x-session-token",sessionToken);
                headers.put("User-Agent",userAgent);
                return headers;
            }
        };

        Volley.newRequestQueue(context).add(jsonObjectRequest);
    }
时间: 2024-12-21 12:25:32

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

Volley框架支持HTTPS请求。

第一次写帖子,嘿嘿. 最近了解到google2013IO大会出了个网络框架,正好项目也需要用到,就看了下. 最后发现接口都是HTTPS的,但是Volley默认是不支持HTTPS,网上找了好久,都没有对Volley HTTPS请求做解答. 所以分享下心得. bvin大神已经分析框架的帖子 在下面的传送: 谷歌Volley网络框架讲解——第一篇 谷歌Volley网络框架讲解——Network及其实现类 谷歌Volley网络框架讲解——网络枢纽 谷歌Volley网络框架讲解——HttpStack及其实

Volley框架使用之请求大量图片

安装说明参考openssl源码文件夹下INSTALL.W32 step1 环境搭建 安装perl,Visual Studio 2008 下载Openssl最新版源码.我下的版本为OpenSSL-1.0.0g. step2 启动Visual Studio 2008 Command Prompt 运行bin\vcvars32 设置 环境变量 注意: 如遇反馈"此处不应该有/Microsoft",参考错误1. step3 VS命令行窗口cd至openssl源码文件夹 执行以下命令 $perl

Google Volley框架源码走读

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<Google Volley使用之自定义> http://blog.csdn.net/yanbober/article/details/45307099 开源项目链接 Volley自定义 Android Developer文档 Volley主页:https://android.g

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

Volley是 Google 推出的 Android 异步网络请求框架和图片加载框架. Volley的特性 (1).封装了的异步的请求API.Volley 中大多是基于接口的设计,可配置性强.(2).一个优雅和稳健的请求队列,一定程度符合 Http 规范,包括请求头的处理,缓存机制的支持等.(3).自定义的网络图像加载视图(NetworkImageView,ImageLoader等) .(4). 提供简便的图片加载工具. 本案例包含get,post请求和几种网络图片加载的方式,效果如图:   

035 Android Volley框架进行网络请求

1.volley入门介绍 开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高. Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行

iOS AFNetworking框架HTTPS请求配置

iOS在Apple公司的强制要求下,数据传输必须按照ATS(App Transefer Security)条款.关于AFNetworking框架传输HTTPS数据. 一.AllowsArbitraryLoads 白名单机制 NSAllowsArbitraryLoads是ATS推广过程中的产物,当然也许可持续很久甚至永久,为了访问HTTP服务,一般需要绕过ATS限制,需要配置info.plist文件 <key>NSAppTransportSecurity</key>  <dic

Volley的Https请求

前提:volley框架的jar,服务端ssl证书文件(crt,cet,pem格式等) 如果没有volley,我们可以通过git clone下来.地址: https://android.googlesource.com/platform/frameworks/volley 我们再来看看volley提供的demo源码: git://github.com/ogrebgr/android_volley_examples.git 把demo源码中的toolsbox下的一些通用类复制到自己项目下,包括: S

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

一: volley简介: Google I/O 2013上,Volley发布了.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.这是Volley名称的由来: a burst or emission of many things or a large amount at once volley适合于数据量比较小,比较频繁的系统使用,可适用于各种管理平台,每次请求数据量小,但是请求频繁的管理系统 简化了安卓原生态的http请求方式. 二:volley的使用语法: 1

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

大家好,今天我们讲一下如何使用Volley框架请求网络,为何要使用Volley框架,这就要先说一下使用Volley框架请求网络的优点了,volley是易于定制的,即你可以根据需求来设定volley框架,还有volley框架支持请求的优先级设定,即你可以自主设定网络请求的优先级,还有就是volley框架请求支持取消单个或多个请求,这个一会设置请求的时候会特别说明,还有它可以自动调度网络请求,至于其他的如代码的健壮性.支持多并发等等就不一一列举了,说了那么多下面就介绍如何自定义并使用Volley框架