使用改造 2 在标头中发送数据执行服务
Posted
技术标签:
【中文标题】使用改造 2 在标头中发送数据执行服务【英文标题】:Execute service with retrofit 2 sending data in header 【发布时间】:2019-04-19 19:24:51 【问题描述】:我正在学习使用改造,使用Webservices,我在执行@GET,@POST方法时没有问题但是现在我必须执行一个发送令牌的服务,我真的不知道该怎么做,但我使用 POSTMAN,我从 Authorization 键中的 Headers 发送此字段令牌。我看过其他使用 OkHttpClient 的示例,但我想不出如何实现它。
所以我通过改造来执行我的服务,头部中的令牌应该发送给他。
@GET(Constants.Retrofit.SURE_DO_YOU_LIKE_PRODUCTS)
Call<List<RelatedProducts>> getProductSureDoYouLike();
这是我在 POSTMAN 中的服务。
【问题讨论】:
【参考方案1】:像这样:
@GET(Constants.Retrofit.SURE_DO_YOU_LIKE_PRODUCTS)
Call<List<RelatedProducts>> getProductSureDoYouLike(@Header("Content-Type") String contentType, @Header("Authorization") String auth);
如果所有请求都需要 Content-Type
,您可以修改 Retrofit
构建器以在每个请求中包含标头:
OkHttpClient client;// = new OkHttpClient();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(5, TimeUnit.MINUTES)
.writeTimeout(5, TimeUnit.MINUTES)
.readTimeout(5, TimeUnit.MINUTES)
.addInterceptor(chain ->
Request request = chain.request().newBuilder()
//Add this to include header in every request
.addHeader("Content-Type", "application/json").build();
return chain.proceed(request);
).build();
client = builder.build();
retrofit = new Retrofit.Builder()
.baseUrl(NetworkConstants.BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
那么您的请求将是:
@GET(Constants.Retrofit.SURE_DO_YOU_LIKE_PRODUCTS)
Call<List<RelatedProducts>> getProductSureDoYouLike(@Header("Authorization") String auth);
然后你会这样调用:
apiService.getProductSureDoYouLike("token");
【讨论】:
看起来不错,但是就像您在 OkHttpClient 中放入的内容类型也可以通过 Authorization 完成一样,只有某些服务需要令牌。 @MichaelStoddart以上是关于使用改造 2 在标头中发送数据执行服务的主要内容,如果未能解决你的问题,请参考以下文章
如何在主机将其发送到网络之前修改数据包标头(IP标头,TCP标头)