【发布时间】:2017-07-26 00:47:14
【问题描述】:
我编写了一个通用的 GsonRequest 类,通过扩展 Volley 的请求来获取和解析来自服务器的 JSON 数据。我的 Volley 请求的通用类如下:
public class GsonRequest<T> extends Request<T> {
private final Gson gson = new Gson();
private final Class<T> clazz;
private final Map<String, String> headers;
private final Listener<T> listener;
/**
* Make a GET request and return a parsed object from JSON. Assumes
* {@link Method#GET}.
*
* @param url
* URL of the request to make
* @param clazz
* Relevant class object, for Gson's reflection
* @param headers
* Map of request headers
*/
public GsonRequest(String url, Class<T> clazz, Map<String, String> headers, Listener<T> listener, ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.clazz = clazz;
this.headers = headers;
this.listener = listener;
}
/**
* Like the other, but allows you to specify which {@link Method} you want.
*
* @param method
* @param url
* @param clazz
* @param headers
* @param listener
* @param errorListener
*/
public GsonRequest(int method, String url, Class<T> clazz, Map<String, String> headers, Listener<T> listener, ErrorListener errorListener) {
super(method, url, errorListener);
this.clazz = clazz;
this.headers = headers;
this.listener = listener;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return headers != null ? headers : super.getHeaders();
}
@Override
protected void deliverResponse(T response) {
listener.onResponse(response);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
return Response.success(gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e) {
return Response.error(new ParseError(e));
}
}
}
现在我想将 SSL Pinning 添加到我的应用程序的所有 API 调用中。 我无法将它开箱即用地添加到 Volley 的 Request 类中。 在这篇博客http://blog.ostorlab.co/2016/05/ssl-pinning-in-android-networking.html 中,他们解释了如何在 Volley 中添加 SSL Pinning。但他们已将其添加到 RequestQueue 中。但是我已经实现了 Volley 的 Request 类。有人用 Request 类而不是 RequestQueue 破解了它,或者我需要单独调用 API 来验证证书。
【问题讨论】:
标签: android ssl ssl-certificate android-volley