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
Libérer: 2025-01-01 04:33:09
original
858 Les gens l'ont consulté

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;
    }
}
Copier après la connexion

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;
Copier après la connexion

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!"
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal