Retrofit 2.X使用详解之请求头
来源:互联网 发布:3d平面设计软件 编辑:程序博客网 时间:2024/05/20 10:55
向请求头添加固定的cookie或者token的时候
public class CookieInterceptor implements Interceptor { private UserStorage mUserStorage; public CookieInterceptor(UserStorage mUserStorage) { this.mUserStorage = mUserStorage; } @Override public Response intercept(Chain chain) throws IOException { Request original = chain.request(); if (!TextUtils.isEmpty(mUserStorage.getCookie()) && !original.url() .toString() .contains("loginUsernameEmail")) { Request request = original.newBuilder() .addHeader("Cookie", "u=" + URLEncoder.encode(mUserStorage.getCookie()) + ";") .addHeader("Cookie", "u=" + URLEncoder.encode(mUserStorage.getToken()) + ";") .build(); return chain.proceed(request); } else { for (String header : chain.proceed(original).headers("Set-Cookie")) { if (header.startsWith("u=")) { String cookie = header.split(";")[0].substring(2); if (!TextUtils.isEmpty(cookie)) { Constants.Cookie = cookie; } } } } return chain.proceed(original); }}
from : http://blog.csdn.net/io_field/article/details/52263224
Retrofit提供了两个两种定义HTTP请求头字段的方法即静态和动态。静态头不能改变为不同的请求,头的键和值是固定的且不可改变的,随着程序的打开便已固定。在Retrofit 2.0中,OkHttp 是必须的,并且自动设置为了依赖。这样,我们又可以采用OkHttp添加请求头的方式添加请求头。
动态添加
@Header String value:默认为"",参数名称 @GET("/") Call<ResponseBody> query(@Header("Accept-Language") String lang); @HeaderMap @GET("/search") Call<ResponseBody> query(@HeaderMap Ma<String, String> headers);
静态添加
@Headers("Cache-Control: max-age=640000")@GET("/tasks")Call<List<Task>> getTasks();@Headers({ "X-Foo: Bar", "X-Ping: Pong"})@GET("/")Call(ResponseBody) deleteObject(@Query("id") String id);
OkHttp 请求拦截器
方式一: OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); httpClient.addInterceptor(new Interceptor() { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Request original = chain.request(); Request request = original.newBuilder() .header("User-Agent", "Your-App-Name") .header("Accept", "application/vnd.yourapi.v1.full+json") .method(original.method(), original.body()) .build(); return chain.proceed(request); } } 方式二: OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); httpClient.addInterceptor(new Interceptor() { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Request original = chain.request(); Request request = original.newBuilder() .addHeader("Cache-Control", "no-cache") .addHeader("Cache-Control", "no-cache") .method(original.method(), original.body()) .build(); return chain.proceed(request); } } OkHttpClient client = httpClient.build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .client(client) .build(); OkHtt请求头通过拦截器添加Header,两种方式的不同 .header(key, val):如果key相同,最后一个val会将前面的val值覆盖 .addHeader(key, val):如果key相同,最后一个val不会将前面的val值覆盖,而是新添加一个Header
参考资料
1.Retrofit 2.0:有史以来最大的改进
阅读全文
0 0
- Retrofit 2.X使用详解之请求头
- Retrofit 2.X使用详解之请求头
- Retrofit 2.X使用详解之基本使用
- Retrofit 2.X使用详解之基本使用
- Android网络请求框架Retrofit使用详解
- Square 之 Retrofit 使用详解
- Ajax之X-Requested-With请求头
- Ajax之X-Requested-With请求头
- AJAX之x-request-with请求头
- 使用Retrofit请求API
- 使用Retrofit Https请求
- Retrofit网络请求使用
- Retrofit用法详解之二(带参数get请求)
- Retrofit的进阶之路(二)添加请求头和上传图片
- OkHttp,Retrofit 1.x - 2.x 基本使用
- HTTP请求头详解
- HTTP请求头详解
- http请求头详解
- 对象的默认原型链
- webpack模块加载介绍
- MFC 多个RadioButton设为一组 vs2013
- nio的实现原理
- 谈一谈苹果原生的布局框架 NSLayoutConstraint 和 VFL
- Retrofit 2.X使用详解之请求头
- 路由器web界面分析(四)---学会追踪标签
- LeetCode题目7. Reverse Integer
- 新闻客户端
- Gradle依赖管理
- 为何数据视觉化越来越火
- 轻松搞定内存对齐
- TLS握手协商流程解析
- Lucene学习笔记 -- day06 索引库的维护