使用改造 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 在标头中发送数据执行服务的主要内容,如果未能解决你的问题,请参考以下文章

改造不通过 h​​ttps 发送标头

在请求的标头中发送令牌是不是安全?

正在发送多个改造电话,但有些电话从未收到响应或错误

如何在主机将其发送到网络之前修改数据包标头(IP标头,TCP标头)

如何将带有自定义标头的任意 JSON 数据发送到 REST 服务器?

EventSource 中的 HTTP 授权标头(服务器发送事件)