Как получить gziped xml-файлы с модификацией?

Я использую модификацию для получения данных из Интернета. Теперь моя проблема в том, что я должен получить файл gziped, и для модернизации требуется какой-то заголовок, который я не знаю, как реализовать право, очевидно. Я сделал исследование по этому вопросу, но ничего не помогает, поскольку большинство разработчиков используют json.

Вот что я пытаюсь сделать:

Retrofit retrofit = new Retrofit.Builder() .baseUrl("this is my baseurl") .addConverterFactory(SimpleXmlConverterFactory.create()) .build(); 

И мой интерфейс:

  public interface RestAPI { @GET("main_data1.gz") Call<Meritum> getData(); @GET("terms1_EN.gz") Call<MeritumTerms> getTerms(); @GET Call<GameResults> getResults(@Url String url); } 

Поэтому я пытаюсь получить этот gziped файл, и я всегда получаю ответ вроде этого:

Введите описание изображения здесь

Итак, что мне нужно добавить, чтобы retrofit распознал этот файл gzip?

Вы не должны указывать какие-либо заголовки.

Я построил мини-сервер, который просто отвечает на следующие XML-файлы:

 <task> <id link="http://url-to-link.com/task-id">1</id> <title>Retrofit XML Converter Blog Post</title> <description>Write blog post: XML Converter with Retrofit</description> <language>de-de</language> </task> 

После запуска сервера я могу получить XML с помощью curl :

 curl http://localhost:1337/ -v --compressed 

Я правильно вижу XML и сервер отвечает следующими заголовками:

 Content-Encoding: gzip Content-Type: application/xml; charset=utf-8 

Зная, что сервер отвечает gzip-ответом, теперь я пытаюсь заставить его работать в Android:

Я использую следующее в build.gradle :

 compile 'com.squareup.retrofit2:retrofit:2.1.0' compile ('com.squareup.retrofit2:converter-simplexml:2.1.0') { exclude group: 'xpp3', module: 'xpp3' exclude group: 'stax', module: 'stax-api' exclude group: 'stax', module: 'stax' } 

Это конфигурация модифицированного экземпляра:

 Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(SimpleXmlConverterFactory.create()) .build(); 

Это интерфейс:

 public interface MyApiEndpointInterface { @GET("/") Call<Task> getInfo(); } 

Это мой класс Task :

 @Root(name = "task") public class Task { @Element(name = "id") private long id; @Element(name = "title") private String title; @Element(name = "description") private String description; @Element(name = "language") private String language; @Override public String toString() { return "Task{" + "id=" + id + ", title='" + title + '\'' + ", description='" + description + '\'' + ", language='" + language + '\'' + '}'; } } 

Я могу подтвердить, что он работает, выполняя следующие действия:

 call.enqueue(new Callback<Task>() { @Override public void onResponse(Call<Task> call, Response<Task> response) { if (response.isSuccessful()) { Log.d("MainActivity", response.body() + ""); ... 

Если у some1 else есть эта проблема, он может ссылаться на ссылку ниже, которая сработала для меня

Модернизация: как разобрать ответ GZIP'd без Content-Encoding: заголовок gzip

Intereting Posts