Estoy tratando de obtener el JSON exacto que se envía en la solicitud. Aquí está mi código:
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();
Pero solo veo esto en los registros:
request:
com.squareup.okhttp.RequestBody$1@3ff4074d
headers:
Content-Type: application/vnd.ll.event.list+json
¿Cómo se supone que debo hacer un registro adecuado, dada la eliminación setLog()
y setLogLevel()
que solíamos usar con Retrofit 1?
Conocí la cosa como tú y traté de preguntarle al autor del libro Retrofit: Me encanta trabajar con API en Android (aquí está el enlace ) (¡no! No estoy haciendo algunos anuncios para ellos ... pero son realmente agradables chicos :) Y el autor me respondió muy pronto, con el método Log en Retrofit 1.9 y Retrofit 2.0-beta.
Y aquí está el código de Retrofit 2.0-beta:
Así es como se agrega el método de registro con la ayuda de HttpLoggingInterceptor . Además, si usted es el lector de ese libro que mencioné anteriormente, puede encontrar que dice que ya no hay un método de registro con Retrofit 2.0, que, le pregunté al autor, no es correcto y actualizarán el libro el próximo año hablando al respecto
// En caso de que no esté tan familiarizado con el método Log en Retrofit, me gustaría compartir algo más.
También debe tenerse en cuenta que hay algunos niveles de registro que puede elegir. Yo uso el Level.BODY la mayor parte del tiempo, lo que me dará algo como esto:
Puede encontrar casi todo el personal de http dentro de la imagen: el encabezado, el contenido y la respuesta, etc.
Y a veces realmente no necesitas que todos los invitados asistan a tu fiesta: solo quiero saber si está conectado correctamente, esa llamada de Internet se realizó con éxito dentro de mi Activiy & Fragmetn. Entonces eres libre de usar Level.BASIC , que devolverá algo como esto:
¿Puedes encontrar el código de estado? 200 OK dentro? Eso es :)
También hay otro, Level.HEADERS , que solo devolverá el encabezado de la red. Ya, por supuesto, otra foto aquí:
Ese es todo el truco de registro;)
Y me gustaría compartirlo con el tutorial que aprendí mucho allí . Tienen un montón de excelentes publicaciones que hablan sobre casi todo lo relacionado con Retrofit, y continúan actualizando la publicación, al mismo tiempo que viene Retrofit 2.0. Eche un vistazo a esos trabajos, que creo que le ahorrarán mucho tiempo.
fuente
Aquí hay un
Interceptor
registro de los cuerpos de solicitud y respuesta (usando Timber, basado en un ejemplo de los documentos OkHttp y algunas otras respuestas SO):fuente
Prueba esto:
Después de esto, en el
body
hay el JSON que le interesa.fuente
String bodyString = response.body().string(); log(bodyString); response = response.newBuilder().body(ResponseBody.create(response.body().contentType(), bodyString)).build();
(No puede leer el cuerpo de la respuesta más de una vez, por lo que tendrá que crear una nueva respuesta con el constructor)El principal problema que enfrenté fue agregar encabezados dinámicamente y registrarlos en debug logcat. Intenté agregar dos interceptores. Uno para iniciar sesión y otro para agregar encabezados sobre la marcha (autorización de token). El problema es que podemos .addInterceptor o .addNetworkInterceptor. Como Jake Wharton me dijo: "Los interceptores de red siempre vienen después de los interceptores de aplicación. Ver https://github.com/square/okhttp/wiki/Interceptors ". Así que aquí hay un ejemplo de trabajo con encabezados y registros:
fuente
No sé si setLogLevel () volverá en la versión 2.0 final de Retrofit, pero por ahora puede usar un interceptor para iniciar sesión.
Un buen ejemplo se puede encontrar en OkHttp wiki: https://github.com/square/okhttp/wiki/Interceptors
fuente
Si está utilizando Retrofit2 y okhttp3, debe saber que Interceptor funciona en cola. Entonces agregue loggingInterceptor al final, después de sus otros interceptores:
fuente
Para aquellos que necesitan un registro de alto nivel en Retrofit, use el interceptor de esta manera
Cortesía : https://github.com/square/retrofit/issues/1072#
fuente
Código Kotlin
fuente
También puede agregar Stetho de Facebook y ver los rastros de red en Chrome: http://facebook.github.io/stetho/
Luego abra "chrome: // inspeccionar" en Chrome ...
fuente
esto creará un objeto de actualización con Logging. sin crear objetos separados.
fuente
Primero agregue dependencia a build.gradle:
implementación 'com.squareup.okhttp3: logging-interceptor: 3.12.1'
Mientras usa Kotlin, puede agregar Logging Interceptor de esta manera:
fuente
El siguiente conjunto de código funciona sin ningún problema para mí.
Gradle
RetrofitClient
También se pueden verificar los resultados yendo a la pestaña Profiler en la parte inferior de Android Studio, luego haciendo clic en + signo para Iniciar una nueva sesión, y luego seleccione el pico deseado en "Red". Allí puede obtener todo, pero es engorroso y lento. Por favor vea la imagen a continuación.
fuente
Una mejor manera de hacer esto correctamente en Retrofit 2 es agregar el interceptor del registrador como un interceptor de red, esto también imprimirá los encabezados de red y sus encabezados personalizados. Lo importante es recordar que el interceptor funciona como una pila y asegúrese de agregar el registrador al final de todo.
fuente
La mayor parte de la respuesta aquí cubre casi todo excepto esta herramienta, una de las mejores maneras de ver el registro.
Es Stetho de Facebook . Esta es la excelente herramienta para monitorear / registrar el tráfico de red de su aplicación en Google Chrome . También puedes encontrar aquí en Github.
fuente
para Retrofit 2.0.2 el código es como
fuente
Aquí hay una manera simple de filtrar cualquier parámetro de solicitud / respuesta de los registros mediante
HttpLoggingInterceptor
:Aquí está la esencia completa:
https://gist.github.com/mankum93/179c2d5378f27e95742c3f2434de7168
fuente
También estaba atrapado en una situación similar, el
setLevel()
método no llegaba, cuando intentaba llamarlo con la instancia de HttpLoggingInterceptor, así:Así es como lo resolví, para generar el registro de Retrofit2,
Supongo que has agregado la dependencia,
Para ver la última versión, puede consultar este enlace:
https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor )
Aquí también explicaron cómo agregar.
Creé una clase con nombre
AddLoggingInterceptor
, aquí está mi código,Entonces, donde estamos creando instancias de nuestra actualización,
Ahora puede ver el registro generado en su Android Studio, puede que necesite buscar,
okHttp
para el proceso de filtrado. Funcionó para mi. Si tiene algún problema, puede enviarme un mensaje de texto aquí.fuente
Encontré el camino para Imprimir Iniciar sesión Retrofit
Funciona para mi.
fuente
El interceptor de Retrofit es una gran característica que le permite trabajar con solicitudes http. Hay dos tipos de ellos: aplicaciones e interceptores de red.
Recomendaría usarlo
Charles Web Debugging Proxy Application
si necesita registrar sus solicitudes / respuestas. La salida es muy similar a Stetho pero es un instrumento más potente que no necesita agregar como dependencia a una aplicación.fuente
Hola chicos, ya encuentro la solución:
fuente