Maison >développement back-end >C++ >Comment enregistrer les messages JSON de requête et de réponse HTTP à l'aide de HttpClient ?
Consignation des messages de demande et de réponse HTTP à l'aide de HttpClient
Dans les situations où vous devez capturer les messages de demande et de réponse pendant la communication HTTP à l'aide de HttpClient, la journalisation devient essentielle. Considérez l'extrait de code suivant :
var response = await client.PostAsJsonAsync(url, entity); if (response.IsSuccessStatusCode) { return await response.Content.ReadAsAsync<T>(); }
Voyons maintenant comment obtenir la charge utile JSON envoyée dans l'objet « entité » sans la sérialiser manuellement.
Solution : journalisation personnalisée Gestionnaire
Pour intercepter et enregistrer les messages de demande et de réponse, vous pouvez créer un gestionnaire de journalisation personnalisé qui entoure le HttpClientHandler. Ce gestionnaire interceptera les requêtes avant que HttpClientHandler ne les traite. Un exemple d'implémentation pourrait être :
public class LoggingHandler : DelegatingHandler { public LoggingHandler(HttpMessageHandler innerHandler) : base(innerHandler) { } protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { Console.WriteLine("Request:"); Console.WriteLine(request.ToString()); if (request.Content != null) { Console.WriteLine(await request.Content.ReadAsStringAsync()); } Console.WriteLine(); HttpResponseMessage response = await base.SendAsync(request, cancellationToken); Console.WriteLine("Response:"); Console.WriteLine(response.ToString()); if (response.Content != null) { Console.WriteLine(await response.Content.ReadAsStringAsync()); } Console.WriteLine(); return response; } }
Dans ce gestionnaire :
Chaînage du gestionnaire de journalisation avec HttpClient
Pour utiliser le gestionnaire de journalisation, vous devez le chaîner à votre HttpClient :
HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler())); HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;
Exemple de sortie
La sortie du code ci-dessus ressemblerait à ceci :
Request: Method: POST, RequestUri: 'http://kirandesktop:9095/api/values', Version: 1.1, Content: System.Net.Http.ObjectContent`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], Headers: { Content-Type: application/json; charset=utf-8 } "Hello, World!" Response: StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Date: Fri, 20 Sep 2013 20:21:26 GMT Server: Microsoft-HTTPAPI/2.0 Content-Length: 15 Content-Type: application/json; charset=utf-8 } "Hello, World!"
En utilisant cette approche, vous pouvez enregistrer efficacement les messages JSON de demande et de réponse lors des appels HTTP effectués avec HttpClient, fournissant ainsi des informations précieuses pour le débogage et le dépannage fins.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!