дооснащение, ohttp3 добавить заголовок - PullRequest
0 голосов
/ 13 мая 2018

Мне нужно получить файл XML с сайта. Я учусь использовать Retrofit. Мне нужно сделать запрос и присоединить мой ключ API через заголовок "X-AppId". Это должно выглядеть так:

X-AppId: my key.

Если я сделаю это из браузера, я получу ответ. Через дооснащение я получаю доступ

ошибка 403 Запрещенный код = 403, сообщение = Запрещено, url = https: //

Подскажите, как правильно реализовано получение ответа от сервера code = 200

Вот моя реализация:

public interface myAPIinterface {
@GET("/api/ru/index/route/?from=Minsk&to=Warsaw")
Call<Routes> getProducts();

}

Это действие, при котором я вывожу в журнал:

private void getProducts(){
    final ProgressDialog loading = ProgressDialog.show(this,"Fetching Data","Please wait...",false,false);
    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    Log.d(TAG, "getProducts");
    httpClient.addInterceptor(new Interceptor() {
        @Override
        public okhttp3.Response intercept(Chain chain) throws IOException {
            Request request = chain.request()
                    .newBuilder()
                    .addHeader("X-AppId:", "97377f7b702d7198e47a2bf12eec74")
                    .build();
            return chain.proceed(request);
        }
    });

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://rasp.rw.by")
            .addConverterFactory(SimpleXmlConverterFactory.create())
            .build();
    myAPIinterface api = retrofit.create(myAPIinterface.class);
Call<Routes> call = api.getProducts();
    call.enqueue(new Callback<Routes>() {
        @Override
        public void onResponse(@NonNull Call<Routes> call, @NonNull Response<Routes> response) {
            Log.d(TAG, "onResponse");
            Log.d(TAG, String.valueOf(kk));
            Log.d(TAG, String.valueOf(response));
            loading.dismiss();}
       @Override
        public void onFailure(Call<Routes> call, Throwable throwable) {
            loading.dismiss();
            Log.d(TAG, "onFailure" + throwable);
        }
    });

это журнал:

Ответ {протокол = http / 1.1, код = 403, сообщение = запрещено, URL = https://rasp.rw.by/api/ru/index/route/?from=Minsk&to=Warsaw}

если я беру сторонние сайты, где нет заголовков, я получаю ответ 200 без проблем. Что я делаю не так в этом случае? Спасибо.

1 Ответ

0 голосов
/ 13 мая 2018

О, чувак, что ты делаешь. Вы можете использовать аннотации, такие как @Query, @Header и т. Д.

public interface myAPIinterface {

    @GET("/api/ru/index/route")
    Call<Routes> getProducts(@Header("X-AppId:") String YOUR_APP_ID,
                             @Query("from") String from,
                             @Query("to") String to)
}

Тогда вы можете создать запрос следующим образом:

Retrofit retrofit = new Retrofit.Builder(). 
.baseUrl("https://rasp.rw.by")
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();

retrofit.create(myAPIinterface.class).getProducts(myId, "Minsk", "Warsaw").enqueue ...

Как это может помочь? Вы забыли добавить заголовок при второй модификации, и тогда у вас есть ошибка 403. Итак, вы должны добавить аннотации, и это будет последней ошибкой, когда вы забыли поместить значение в header / query / etc.

...