Получение 401 несанкционированной ошибки с retrofit2 - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь получить данные из API, включая Authorization с модификацией2. API работает правильно с postman и Authorization правильно.

Я передаю авторизацию в @header.

Вот маршрут, который я пытаюсь вызвать, как реализованов моей службе запросов:

 @GET("wc-api/v3/products")
Single<ProductModel> getProduct(@Header("Authorization") String Authorization, @Query("page") int page);

С этими аутентифицированными заголовками, кажется, все работает нормально, пока я не получу конкретный запрос, тогда я получу ошибку 401:

Response{protocol=http/1.1, code=401, message=Unauthorized, url=https://*******.com/wc-api/v3/products?page=1}

Мой модифицированный клиент:

        OkHttpClient httpClient =
                new OkHttpClient.Builder()
                        .connectTimeout(10, TimeUnit.SECONDS)
                        .writeTimeout(10, TimeUnit.SECONDS)
                        .readTimeout(10, TimeUnit.SECONDS)
                        .build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(App.getInstance().getAddress())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(httpClient)
                .build();

        apiService = retrofit.create(ApiService.class);

Затем в упражнении я получаю эту ошибку 401, вот как я реализую ее вызов: (Используйте Rxjava)

dataSource.getProduct(Credentials.basic("ck_*********************",
                            "cs_***************************"), 1)
                            .subscribeOn(Schedulers.newThread())
                            .observeOn(AndroidSchedulers.mainThread())
                            .subscribe(new SingleObserver<ProductModel>() {
                                @Override
                                public void onSubscribe(Disposable d) {
                                    compositeDisposable.add(d);
                                }

                                @Override
                                public void onSuccess(ProductModel productModel) {

                                    if (productModel.getProducts() != null)
                                        setModel(productModel.getProducts());
                                    else
                                        Toast.makeText(context, context.getResources().getString(R.string.dialog_ReceiveError), Toast.LENGTH_SHORT).show();
                                }

                                @Override
                                public void onError(Throwable e) {
                                    setModel(new ArrayList<>());
                                    Toast.makeText(context, context.getResources().getString(R.string.dialog_serverError), Toast.LENGTH_SHORT).show();
                                }
                            });

Вотснимок профайлера проекта Android Studio: enter image description here enter image description here

Вот снимок postman: enter image description here

Редактировать:

public class ProductModel {

@SerializedName("products")
@Expose
private List<Products> products;

@SerializedName("errors")
@Expose
private ErrorShopModel errors;
}

   public List<Products> getProducts() {
    return products;
}

productModel:

public class Products  {

@SerializedName("id")
@Expose
private int id;

@SerializedName("title")
@Expose
private String title;

@SerializedName("description")
@Expose
private String description;

@SerializedName("images")
@Expose
private List<ImagesModel> images;

,.....

Getter & Setter

}
...