Я пытаюсь получить точный JSON, который отправляется в запросе. Вот мой код:
OkHttpClient client = new OkHttpClient();
client.interceptors().add(new Interceptor(){
@Override public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Log.e(String.format("\nrequest:\n%s\nheaders:\n%s",
request.body().toString(), request.headers()));
com.squareup.okhttp.Response response = chain.proceed(request);
return response;
}
});
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(client).build();
Но я вижу это только в логах:
request:
com.squareup.okhttp.RequestBody$1@3ff4074d
headers:
Content-Type: application/vnd.ll.event.list+json
Как я должен делать правильное ведение журнала, учитывая удаление setLog()
и setLogLevel()
которое мы использовали для Retrofit 1?
Я встретил то же самое, что и вы, и попытался спросить у автора книги Retrofit: люблю работать с API на Android (вот ссылка ) (нет! Я не делаю для них рекламу ... но они действительно хороши ребята :) И автор ответил мне очень скоро, с обоими методами журнала на Retrofit 1.9 и Retrofit 2.0-бета.
А вот код Retrofit 2.0-beta:
Это как добавить метод регистрации с помощью HttpLoggingInterceptor . Также, если вы читаете ту книгу, о которой я упоминал выше, вы можете обнаружить, что там написано, что в Retrofit 2.0 нет метода ведения журнала - что, как я спросил автора, неверно, и они обновят книгу в следующем году. об этом.
// Если вы не знакомы с методом Log в Retrofit, я хотел бы поделиться чем-то еще.
Также следует заметить, что есть несколько уровней ведения журнала, которые вы можете выбрать. Я использую Level.BODY большую часть времени, что даст примерно такую вещь:
Вы можете найти почти всех сотрудников http внутри картинки: заголовок, содержание и ответ и т. Д.
И иногда вам действительно не нужно, чтобы все гости посещали вашу вечеринку: я просто хочу знать, успешно ли она подключена, что интернет-звонок успешно осуществляется в моей Activiy & Fragmetn. Тогда вы можете использовать Level.BASIC , который будет возвращать что-то вроде этого:
Можете ли вы найти код состояния 200 OK внутри? Вот и все :)
Также есть еще один, Level.HEADERS , который будет возвращать только заголовок сети. Я, конечно, другая картина здесь:
Вот и весь трюк с логгингом;)
И я хотел бы поделиться с вами на уроке я узнал много там . У них есть куча отличных постов, рассказывающих почти обо всем, что касается Retrofit, и они продолжают обновлять пост, в то же время выходит Retrofit 2.0. Пожалуйста, взгляните на те работы, которые, я думаю, сэкономят вам много времени.
источник
Вот
Interceptor
что регистрирует тела запросов и ответов (используя Timber, на основе примера из документации OkHttp и некоторых других ответов SO):источник
Попробуй это:
После этого в
body
JSON вы заинтересованы.источник
String bodyString = response.body().string(); log(bodyString); response = response.newBuilder().body(ResponseBody.create(response.body().contentType(), bodyString)).build();
(Вы не можете прочитать тело ответа более одного раза, поэтому вам нужно будет создать новый ответ вместе со строителем)Основной проблемой, с которой я столкнулся, было динамическое добавление заголовков и их запись в отладочный logcat. Я пытался добавить два перехватчика. Один для регистрации и один для добавления заголовков на ходу (авторизация токена). Проблема заключалась в том, что мы можем .addInterceptor или .addNetworkInterceptor. Как сказал мне Джейк Уортон: «Сетевые перехватчики всегда идут после перехватчиков приложений. См. Https://github.com/square/okhttp/wiki/Interceptors ». Итак, вот рабочий пример с заголовками и журналами:
источник
Я не знаю, вернется ли setLogLevel () в финальной версии Retrofit 2.0, но сейчас вы можете использовать перехватчик для ведения журнала.
Хороший пример можно найти в википедии OkHttp: https://github.com/square/okhttp/wiki/Interceptors
источник
Если вы используете Retrofit2 и okhttp3, вам нужно знать, что Interceptor работает по очереди. Так что добавьте loggingInterceptor в конце, после других ваших перехватчиков:
источник
Для тех, кому нужна высокоуровневая регистрация в Retrofit, используйте перехватчик как этот
Предоставлено : https://github.com/square/retrofit/issues/1072#
источник
Код Котлина
источник
Вы также можете добавить Stetho на Facebook и посмотреть на следы сети в Chrome: http://facebook.github.io/stetho/
Затем откройте «chrome: // inspect» в Chrome ...
источник
это создаст модифицированный объект с регистрацией. без создания отдельных объектов.
источник
Сначала добавьте зависимость к build.gradle:
реализация 'com.squareup.okhttp3: logging-interceptor: 3.12.1'
При использовании Kotlin вы можете добавить Logging Interceptor следующим образом:
источник
Следующий набор кода работает без проблем для меня
Gradle
RetrofitClient
Можно также проверить результаты, перейдя на вкладку «Профилировщик» в нижней части Android Studio, затем щелкнув значок «+», чтобы начать новую сессию, а затем выберите нужный пик в «Сети». Там вы можете получить все, но это громоздко и медленно. Пожалуйста, смотрите изображение ниже.
источник
Лучший способ сделать это правильно в Retrofit 2 - добавить перехватчик регистратора в качестве networkInterceptor, который будет распечатывать заголовки сети и ваши пользовательские заголовки. Важно помнить, что перехватчик работает как стек и быть уверенным, что вы добавляете регистратор в конце всего.
источник
Большая часть ответа здесь охватывает почти все, кроме этого инструмента, одного из самых классных способов просмотра журнала.
Это Stetho в Facebook . Это превосходный инструмент для мониторинга / регистрации сетевого трафика вашего приложения в Google Chrome . Вы также можете найти здесь, на Github.
источник
для Retrofit 2.0.2 код похож
источник
Вот простой способ отфильтровать любые параметры запроса / ответа из журналов, используя
HttpLoggingInterceptor
:Вот полная суть:
https://gist.github.com/mankum93/179c2d5378f27e95742c3f2434de7168
источник
Я также застрял в подобной ситуации,
setLevel()
метод не приходил, когда я пытался вызвать его с помощью экземпляра HttpLoggingInterceptor, например так:Вот как я решил, чтобы создать журнал для Retrofit2,
Я полагаю, вы добавили зависимость,
Для последней версии вы можете проверить, эту ссылку:
https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor )
Здесь они также объяснили, как добавить.
Я создал класс с именем
AddLoggingInterceptor
, вот мой код,Затем, где мы создаем нашу модернизацию,
Теперь вы можете увидеть журнал, сгенерированный в вашей Android Studio, вам может понадобиться поискать
okHttp
процесс фильтрации. Это сработало для меня. Если какие-либо вопросы вы можете написать мне здесь.источник
Я нашел способ для печати Войти в систему дооснащения
Работает для меня.
источник
Перехватчик Retrofit - отличная функция, которая позволяет вам работать с http-запросами. Есть два типа: приложение и сетевые перехватчики.
Я бы порекомендовал использовать,
Charles Web Debugging Proxy Application
если вам нужно регистрировать ваши запросы / ответы. Вывод очень похож на Stetho, но это более мощный инструмент, который вам не нужно добавлять в качестве зависимости от приложения.источник
Эй, ребята, я уже нахожу решение:
источник