okhttp通过拦截器输出html源码内容
来源:互联网 发布:linux停机命令 编辑:程序博客网 时间:2024/06/11 07:58
使用Retrofit加okhttp,如果返回失败的话,callback中response中不能看到失败的网页源码
为此我们有两种方法,通过okhttp拦截器或者retrofit自定义ResponseConvertFactory实现
public class ApiUtil { private static final int DEFAULT_TIMEOUT = 5; private Retrofit retrofit; private EnergySavingService energySavingService; private static final boolean DEBUG = true; private ApiUtil(){ OkHttpClient.Builder builder = new OkHttpClient.Builder(); // 添加自定义的拦截器 builder.addInterceptor(new ResponseInterceptor()); builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS); builder.cookieJar(new CookieJar() { private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>(); @Override public void saveFromResponse(HttpUrl url, List<Cookie> cookies) { cookieStore.put(url.host(), cookies); } @Override public List<Cookie> loadForRequest(HttpUrl url) { List<Cookie> cookies = cookieStore.get(url.host()); return cookies != null ? cookies : new ArrayList<Cookie>(); } }); retrofit = new Retrofit.Builder() .client(builder.build()) //这里使用的是自定义的ResponseConvertFactory .addConverterFactory(ResponseConvertFactory.create()) .baseUrl(EnergySavingService.BASE_URL) .build(); 以下略 } private static class SingletonHolder{ private static final ApiUtil INSTANCE = new ApiUtil(); } public static ApiUtil getInstance(){ return SingletonHolder.INSTANCE; }
方法一
ResponseInterceptor .java
public class ResponseInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Response response = chain.proceed(request); // 以下两句还有点问题 MediaType mediaType = response.body().contentType(); // 获取网页源码 String content = response.body().string(); try{ Log.d("flag--","intercept(ResponseInterceptor.java:39)-->>"+content); check(response); }catch (Exception e){ e.printStackTrace(); } return response.newBuilder() .body(ResponseBody.create(mediaType, content)) .build(); }}
方法二
ResponseConvertFactory.java
public class ResponseConvertFactory extends Converter.Factory{ public static ResponseConvertFactory create() { return create(new Gson()); } public static ResponseConvertFactory create(Gson gson) { return new ResponseConvertFactory(gson); } private final Gson gson; private ResponseConvertFactory(Gson gson) { if (gson == null) throw new NullPointerException("gson == null"); this.gson = gson; } @Override public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) { return new GsonResponseBodyConverter<>(gson,type); }}
package com.huanke.cisl.energysaving.util;import android.util.Log;import com.google.gson.Gson;import java.io.IOException;import java.lang.reflect.Type;import okhttp3.ResponseBody;import retrofit2.Converter;class GsonResponseBodyConverter<T> implements Converter<ResponseBody, T> { private final Gson gson; private final Type type; GsonResponseBodyConverter(Gson gson, Type type) { this.gson = gson; this.type = type; } @Override public T convert(ResponseBody value) throws IOException { String response = value.string(); // 在这里可以打印出网页源码 Log.d("flag--","convert(GsonResponseBodyConverter.java:26)-->>"+response); return gson.fromJson(response, type); }}
最终效果
参考:
http://blog.csdn.net/ethanco/article/details/51908479
http://www.jianshu.com/p/d836271b1ae4
阅读全文
0 0
- okhttp通过拦截器输出html源码内容
- OKhttp源码解析---拦截器之RetryAndFollowUpInterceptor
- OKhttp源码解析---拦截器之BridgeInterceptor
- OKhttp源码解析---拦截器之CacheInterceptor
- OKhttp源码解析---拦截器之ConnectInterceptor
- OKhttp源码解析---拦截器之CallServerInterceptor
- OkHttp 源码解析(3) Interceptor 拦截器
- Okhttp源码解析之Interceptor(拦截器)
- OkHttp拦截器之获取Response.body的内容
- OkHttp + Retrofit 拦截器 拼装参数拦截器 日志输出拦截器
- OkHttp 3.x 源码解析之Interceptor 拦截器
- Okhttp 拦截器
- okhttp 拦截器调用。
- OkHttp-Interceptors拦截器
- okhttp拦截器+Imageloader
- OkHttp拦截器
- okhttp拦截器
- Okhttp的拦截器
- 在linux下安装php扩展时,找不到configure
- 繁花规小程序~
- 第六章 二叉树和树
- hadoop2.7.2本地调试MR IDEA本地调试mapreduce
- 龟兔赛跑
- okhttp通过拦截器输出html源码内容
- Handler源码分析
- JAVA第5次作业(2)
- 【实战】(一)android模拟qq登录(get和post方法)
- 队列的概念和实现
- Android逆向之Xposed不重启手机替换hook代码(并不是简单替换字符串)
- 解析XML格式的指定数据
- 201604-1 折点计数 ccf
- 疯狂Spring Cloud连载(17)Hystrix属性配置与回退