J'essaie d'obtenir le JSON exact qui est envoyé dans la demande. Voici mon code:
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();
Mais je ne vois cela que dans les journaux:
request:
com.squareup.okhttp.RequestBody$1@3ff4074d
headers:
Content-Type: application/vnd.ll.event.list+json
Comment suis-je censé effectuer une journalisation appropriée, compte tenu de la suppression de setLog()
et setLogLevel()
que nous utilisions avec Retrofit 1?
J'ai rencontré le truc comme vous et j'ai essayé de demander à l'auteur du livre Retrofit: Love working with APIs on Android (here is the link ) (nope! Je ne fais pas de pub pour eux .... mais ils sont vraiment sympas les gars :) Et l'auteur m'a répondu très bientôt, avec à la fois la méthode Log sur Retrofit 1.9 et Retrofit 2.0-beta.
Et voici le code de Retrofit 2.0-beta:
Voici comment ajouter une méthode de journalisation à l'aide de HttpLoggingInterceptor . De plus, si vous êtes le lecteur de ce livre que j'ai mentionné ci-dessus, vous constaterez peut-être qu'il dit qu'il n'y a plus de méthode de journalisation avec Retrofit 2.0 - ce qui, j'avais demandé à l'auteur, n'est pas correct et ils mettront à jour le livre l'année prochaine en parlant à propos de ça.
// Si vous n'êtes pas familier avec la méthode Log dans Retrofit, je voudrais partager quelque chose de plus.
Il convient également de noter qu'il existe certains niveaux de journalisation que vous pouvez sélectionner. J'utilise le Level.BODY la plupart du temps, ce qui donnera quelque chose comme ça:
Vous pouvez trouver presque tout le personnel http à l'intérieur de l'image: l'en-tête, le contenu et la réponse, etc.
Et parfois, vous n'avez vraiment pas besoin de tous les invités pour assister à votre fête: je veux juste savoir s'il est correctement connecté, cet appel Internet est passé avec succès dans mon Activiy & Fragmetn. Ensuite, vous êtes libre d'utiliser Level.BASIC , qui retournera quelque chose comme ceci:
Pouvez-vous trouver le code d'état 200 OK à l' intérieur? C'est ça :)
Il y en a aussi un autre, Level.HEADERS , qui ne renverra que l'en-tête du réseau. Ya bien sûr une autre photo ici:
C'est tout l'astuce Logging;)
Et je voudrais vous partager le tutoriel que j'ai beaucoup appris là-bas . Ils ont un tas d'excellents articles sur presque tout ce qui concerne Retrofit, et ils continuent de mettre à jour l'article, en même temps que Retrofit 2.0 arrive. Veuillez jeter un œil à ces travaux qui, je pense, vous feront gagner beaucoup de temps.
la source
Voici un
Interceptor
qui enregistre à la fois les corps de demande et de réponse (en utilisant Timber, basé sur un exemple des documents OkHttp et d'autres réponses SO):la source
Essaye ça:
Après cela,
body
il y a le JSON qui vous intéresse.la source
String bodyString = response.body().string(); log(bodyString); response = response.newBuilder().body(ResponseBody.create(response.body().contentType(), bodyString)).build();
(Vous ne pouvez pas lire le corps de la réponse plus d'une fois, vous devrez donc créer une nouvelle réponse avec le constructeur)Le problème principal auquel j'ai été confronté était l'ajout dynamique d'en-têtes et leur journalisation dans le débogage logcat. J'ai essayé d'ajouter deux intercepteurs. Un pour la journalisation et un pour ajouter des en-têtes sur le pouce (autorisation de jeton). Le problème était que nous pouvons .addInterceptor ou .addNetworkInterceptor. Comme Jake Wharton me l'a dit: "Les intercepteurs réseau viennent toujours après les intercepteurs d'application. Voir https://github.com/square/okhttp/wiki/Interceptors ". Voici donc un exemple de travail avec les en-têtes et les journaux:
la source
Je ne sais pas si setLogLevel () reviendra dans la version finale 2.0 de Retrofit mais pour l'instant vous pouvez utiliser un intercepteur pour la journalisation.
Un bon exemple peut être trouvé dans le wiki OkHttp: https://github.com/square/okhttp/wiki/Interceptors
la source
Si vous utilisez Retrofit2 et okhttp3, vous devez savoir qu'Interceptor fonctionne par file d'attente. Ajoutez donc loggingInterceptor à la fin, après vos autres intercepteurs:
la source
Pour ceux qui ont besoin d'une journalisation de haut niveau dans Retrofit, utilisez l'intercepteur comme celui-ci
Courtoisie : https://github.com/square/retrofit/issues/1072#
la source
Code Kotlin
la source
Vous pouvez également ajouter le Stetho de Facebook et consulter les traces du réseau dans Chrome: http://facebook.github.io/stetho/
Ouvrez ensuite "chrome: // inspecter" dans Chrome ...
la source
cela créera un objet de modification avec Logging. sans créer d'objets séparés.
la source
Ajoutez d'abord la dépendance à build.gradle:
implémentation 'com.squareup.okhttp3: logging-interceptor: 3.12.1'
Lorsque vous utilisez Kotlin, vous pouvez ajouter Logging Interceptor comme ceci:
la source
L'ensemble de code suivant fonctionne sans aucun problème pour moi
Gradle
RetrofitClient
On peut également vérifier les résultats en allant dans l'onglet Profiler en bas d'Android Studio, puis en cliquant sur le signe + pour démarrer une nouvelle session, puis sélectionnez le pic souhaité dans "Réseau". Là, vous pouvez tout obtenir, mais c'est lourd et lent. Veuillez voir l'image ci-dessous.
la source
La meilleure façon de procéder correctement dans Retrofit 2 est d'ajouter l'intercepteur de l'enregistreur en tant qu'intercepteur réseau, cela imprimera également les en-têtes du réseau et vos en-têtes personnalisés. L'important est de se rappeler que l'intercepteur fonctionne comme une pile et assurez-vous d'ajouter le logger à la fin de tout.
la source
La plupart des réponses ici couvrent presque tout sauf cet outil, l'une des façons les plus cool de voir le journal.
C'est Stetho de Facebook . C'est le superbe outil pour surveiller / enregistrer le trafic réseau de votre application sur Google Chrome . Vous pouvez également trouver ici sur Github.
la source
pour Retrofit 2.0.2, le code est comme
la source
Voici un moyen simple de filtrer tous les paramètres de demande / réponse des journaux à l'aide de
HttpLoggingInterceptor
:Voici l'essentiel:
https://gist.github.com/mankum93/179c2d5378f27e95742c3f2434de7168
la source
J'étais également coincé dans une situation similaire, la
setLevel()
méthode ne venait pas, quand j'essayais de l'appeler avec l'instance de HttpLoggingInterceptor, comme ceci:Voici comment je l'ai résolu, pour générer un journal pour Retrofit2,
Je suppose que vous avez ajouté la dépendance,
Pour la dernière version que vous pouvez consulter, ce lien:
https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor )
Ici, ils ont également expliqué comment ajouter.
J'ai créé une classe avec un nom
AddLoggingInterceptor
, voici mon code,Ensuite, où nous instancions notre rénovation,
Maintenant, vous pouvez voir le journal généré dans votre Android Studio, vous devrez peut-être rechercher le
okHttp
processus de filtrage. Ça a marché pour moi. Si vous rencontrez des problèmes, vous pouvez m'envoyer un SMS ici.la source
J'ai trouvé le moyen d'imprimer
Travaille pour moi.
la source
L'intercepteur de Retrofit est une excellente fonctionnalité qui vous permet de travailler avec des requêtes http. Il existe deux types d'entre eux: les intercepteurs d'application et de réseau.
Je recommanderais d'utiliser
Charles Web Debugging Proxy Application
si vous avez besoin de consigner vos demandes / réponses. La sortie est très similaire à Stetho mais c'est un instrument plus puissant que vous n'avez pas besoin d'ajouter comme dépendance à une applicationla source
Hé les gars, je trouve déjà une solution:
la source