Maison >développement back-end >C++ >Comment enregistrer le contenu JSON des requêtes et des réponses à l'aide de HttpClient ?

Comment enregistrer le contenu JSON des requêtes et des réponses à l'aide de HttpClient ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-01 04:33:09899parcourir

How to Log Request and Response JSON Content Using HttpClient?

Consignation des messages de demande/réponse dans HttpClient

Cet article répond à la nécessité de consigner les messages de demande et de réponse lors de l'utilisation de HttpClient. Il se concentre sur l'approche pratique de la journalisation du contenu JSON réel publié via la méthode PostAsJsonAsync de HttpClient.

Solution :

Pour enregistrer le contenu JSON, nous employons un DelegatingHandler nommé LoggingHandler. . L'interception a lieu avant que la requête n'atteigne le HttpClientHandler, permettant l'accès aux données JSON. Le formateur interne d'ObjectContent produit la représentation JSON capturée par la méthode ReadAsStringAsync de LoggingHandler.

L'implémentation de la classe LoggingHandler est la suivante :

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;
    }
}

Ce LoggingHandler doit être chaîné avec le HttpClient :

HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler()));
HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;

Le résultat résultant démontre la journalisation de la demande et de la réponse messages, y compris le contenu JSON publié :

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!"

Cette technique fournit un mécanisme de journalisation détaillé pour les requêtes et les réponses HttpClient, facilitant le débogage et la surveillance de la communication sur HTTP.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn