【问题标题】:how to get retrofit request headers onResponse callback如何获取改造请求标头 onResponse 回调
【发布时间】:2021-02-16 19:52:19
【问题描述】:

我使用拦截器设置请求的标头,例如:

    @NotNull
    @Override
    public Response intercept(@NonNull Chain chain) throws IOException {
        Request request = chain.request();
        Request.Builder builder = request.newBuilder();

        builder.header("Authorization", "[token]");
        builder.header("UniqueKey", "[key]");
        etc;

        return chain.proceed(builder.build());
}

一切都按预期工作(服务器看到并接受)。

我的问题是,当响应到来时,我想在我的应用程序中读取这些标头。

@Override
    public void onResponse(@NonNull Call<T> call, Response<T> response) {

}

我使用call.request.headers(),但总是返回一个空字符串[]。所有其他属性(url、params、verb)都可以访问,只是缺少标题。

我在请求标头中设置了一个键,基本上我想在收到响应时检查这个键。

任何线索为什么标题不可见以及如何在onResponse() 中获取它们?

【问题讨论】:

    标签: android retrofit2 request-headers


    【解决方案1】:

    examples之一:

    List<Header> headerList = response.getHeaders();
    for(Header header : headerList) {
        Log.d(TAG, header.getName() + " " + header.getValue());
    }
    

    必须在 onResponse 方法中使用。另一种方式:

    // get headers
    Headers headers = response.headers();
    // get header value
    String cookie = response.headers().get("Set-Cookie");
    

    【讨论】:

    • 这会获取响应的标头(内容长度、内容类型、服务器、严格传输安全)...我需要在请求中发送的标头。
    • 你可以创建一个带有标头值的变量
    • 是的,但是我有很多请求同时发生并且存储变量没有帮助。另一种选择是在request body 中使用param,但这涉及到每个请求的工作,所以我想知道是否可以使用标头来完成。
    猜你喜欢
    • 2022-01-05
    • 2017-12-01
    • 1970-01-01
    • 2021-08-05
    • 2018-02-27
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多