首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Retrofit 2.1.0中传递报头

如何在Retrofit 2.1.0中传递报头
EN

Stack Overflow用户
提问于 2016-12-22 14:41:11
回答 4查看 2.4K关注 0票数 3

嗨,从上两个月开始,我被这个改造卡住了,任何人请帮帮我。我已经尝试了很多方法来在改造中传递报头,但是我不能使用retrofit 2.0.1

build.gradle

代码语言:javascript
运行
复制
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'
compile 'com.squareup.okhttp:okhttp:2.7.2'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

在ApiClientHeader.jav中

代码语言:javascript
运行
复制
        import okhttp3.Interceptor;
        import okhttp3.OkHttpClient;
        import okhttp3.Request;
        import okhttp3.Response;
        import retrofit2.Retrofit;
        import retrofit2.converter.gson.GsonConverterFactory;

        public class ApiClientHeader {

        public static final String BASE_URL = "URL";
        private static Retrofit retrofit = null;


        public static Retrofit getClient(final String token) {


            OkHttpClient okClient = new OkHttpClient.Builder()
                    .addInterceptor(
                            new Interceptor() {
                                @Override
                                public Response intercept(Interceptor.Chain chain) throws IOException {
                                    Request original = chain.request();

                                    // Request customization: add request headers
                                    Request.Builder requestBuilder = original.newBuilder()
                                            .header("Authorization", "Bearer " + token)
                                            .method(original.method(), original.body());

                                    Request request = requestBuilder.build();
                                    return chain.proceed(request);
                                }
                            })
                    .build();


            if (retrofit == null) {
                retrofit = new Retrofit.Builder()
                        .baseUrl(BASE_URL)
                        .client(okClient)
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
            }
            return retrofit;
        }

    }

在我的ApiInterface.java中

代码语言:javascript
运行
复制
@GET("profile")
Call<JsonObject> getProfile();

在我的活动中,我只是调用函数

代码语言:javascript
运行
复制
    private void getProfileData()
    {
        Singleton single = new Singleton();
        String auth = single.getAuthorization();

        Log.d("===========>>>>>>",auth);


        ApiInterface apiService =
                ApiClientHeader.getClient(auth).create(ApiInterface.class);
        //showProgress(true);
        Call<JsonObject> profileResponse = apiService.getProfile();
        profileResponse.enqueue(new Callback<JsonObject>() {
            @Override
            public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {

                //showProgress(false);

                Log.d("============>"," Call Request " +String.valueOf(call.request().toString()));
                Log.d("============>", " Response code " + String.valueOf(response.code()));
//                Log.d("============>", " Response Body " + String.valueOf(response.body().toString()));

                if(response.code() == HttpURLConnection.HTTP_OK)
                {

                }

            }

            @Override
            public void onFailure(Call<JsonObject> call, Throwable t) {

                //showProgress(false);
                Log.d("============>"," Call Request " +String.valueOf(call.request().toString()));
                Log.d("============>"," Call Request " +String.valueOf(call.request().headers()));
                Log.d("=======>", "Failure" + t.getMessage());
            }

        });
    }

尽管如此,我还是收到了403个无效访问。在这里,我没有使用任何POJO类来发送或接收数据。请帮帮我。

EN

回答 4

Stack Overflow用户

发布于 2016-12-22 14:49:49

您必须像这样传递身份验证字符串

代码语言:javascript
运行
复制
@GET("profile")
Call<JsonObject> getProfile((@Header("Authorization") String authorization))
票数 1
EN

Stack Overflow用户

发布于 2016-12-22 14:45:06

代码语言:javascript
运行
复制
    @Headers({
    "Accept: application/vnd.github.v3.full+json",
    "User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);

有关documentation的更多信息

票数 0
EN

Stack Overflow用户

发布于 2016-12-22 15:20:14

我找到了一个最好的链接

你可以添加,我已经在我的演示中使用过了,如下所示:

代码语言:javascript
运行
复制
    httpClient.addNetworkInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {

            Request originalRequest = chain.request();

            // Add authorization header with updated authorization value to intercepted request
            Request authorisedRequest = originalRequest.newBuilder()
                    .header("Authorization", AccountAuthenticator.getAccessTokenWithTokenType(mContext))
                    .build();
            return chain.proceed(authorisedRequest);
        }
    });

依赖关系:

代码语言:javascript
运行
复制
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41277160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档