Ошибка 401 от дооснащения даже после установки токена авторизации - PullRequest
0 голосов
/ 04 ноября 2019

Пытаясь получить доступ к API с помощью @POST, и я уже установил свой @Header("Authorization") String TOKEN.

Я попробовал его с @GET, и это сработало, но я передаю некоторые поля формы, такМне нужно использовать @POST

@POST("details")
@FormUrlEncoded
Call<Play> playTrack(
        @Header("Authorization") String TOKEN,
        @Field("event_id") int event_id,
        @Field("longitude") double longitude,
        @Field("latitude") double latitude    
);

Ответы [ 3 ]

0 голосов
/ 04 ноября 2019

Попробуйте создать перехватчик заголовка и добавить его в OkHttpClient:

Interceptor headerIntercepter  = new Interceptor() {
        @Override
        public okhttp3.Response intercept(Chain chain) throws IOException {

      return chain.proceed(    chain.request().newBuilder().addHeader("authorization- 
client", accessToken).build());

        }
    };

OkHttpClient client = new OkHttpClient.Builder().connectTimeout(120, TimeUnit.SECONDS).readTimeout(120, TimeUnit.SECONDS)
            .addInterceptor(headerIntercepter)
            .build();

    try {

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Server_URL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        apiService = retrofit.create(Api.class);
0 голосов
/ 04 ноября 2019

Просмотр ответа 401 означает, что запрос был успешно выполнен и сервер вернул этот код состояния. Это не проблема с Retrofit, но в любой аутентификационной информации, которую вы включаете в запрос, ожидаемый сервером.

Попробуйте с почтальоном с теми же данными и отметьте

Примечание: не забудьте добавить Тип токена в качестве префикса к вашему токену

0 голосов
/ 04 ноября 2019

попробуйте использовать Multipart для аннотации

@Multipart
@POST("details")
Call<ResponseBody> playTrack(
    @Header("Authorization") String token,
    @Part("event_id") RequestBody eventId,
    @Part("longitude") RequestBody longitude,
    @Part("latitude") RequestBody latitude,
);

, убедитесь, что RequestBody передан в качестве параметров

val latitude = RequestBody.create(MediaType.parse("text/plain"), doubleLatitude.toString())
...