Heim > Backend-Entwicklung > C++ > Wie protokolliere ich HTTP-Anforderungs- und Antwort-JSON-Nachrichten mit HttpClient?

Wie protokolliere ich HTTP-Anforderungs- und Antwort-JSON-Nachrichten mit HttpClient?

Patricia Arquette
Freigeben: 2024-12-31 14:22:10
Original
353 Leute haben es durchsucht

How to Log HTTP Request and Response JSON Messages using HttpClient?

HTTP-Anforderungs- und Antwortnachrichten mit HttpClient protokollieren

In Situationen, in denen Sie die Anforderungs- und Antwortnachrichten während der HTTP-Kommunikation mit HttpClient erfassen müssen, Protokollierung wird unerlässlich. Betrachten Sie den folgenden Codeausschnitt:

var response = await client.PostAsJsonAsync(url, entity);

if (response.IsSuccessStatusCode)
{
    return await response.Content.ReadAsAsync<T>();
}
Nach dem Login kopieren

Lassen Sie uns nun untersuchen, wie Sie die im „Entity“-Objekt gesendete JSON-Nutzlast erhalten, ohne sie manuell zu serialisieren.

Lösung: Benutzerdefinierte Protokollierung Handler

Um Anforderungs- und Antwortnachrichten abzufangen und zu protokollieren, können Sie einen benutzerdefinierten Protokollierungshandler erstellen, der umschließt der HttpClientHandler. Dieser Handler fängt Anfragen ab, bevor HttpClientHandler sie verarbeitet. Eine Beispielimplementierung könnte sein:

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;
    }
}
Nach dem Login kopieren

In diesem Handler:

  • Console.WriteLine(request.Content.ReadAsStringAsync()) liest den Anforderungsinhalt, was den Formatierer dazu veranlasst Serialisieren Sie das Entitätsobjekt in JSON.
  • Console.WriteLine(response.Content.ReadAsStringAsync()) macht dasselbe für den Antwortinhalt.

Verkettung des Protokollierungshandlers mit HttpClient

Um den Protokollierungshandler zu verwenden, müssen Sie ihn mit Ihrem verketten HttpClient:

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

Beispielausgabe

Die Ausgabe des obigen Codes würde wie folgt aussehen:

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!"
Nach dem Login kopieren

Durch die Verwendung dieses Ansatzes Sie können die Anforderungs- und Antwort-JSON-Nachrichten während HTTP-Aufrufen mit HttpClient effektiv protokollieren und so wertvolle Erkenntnisse für das Debuggen und die Fehlerbehebung liefern Zwecke.

Das obige ist der detaillierte Inhalt vonWie protokolliere ich HTTP-Anforderungs- und Antwort-JSON-Nachrichten mit HttpClient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage