Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Log Permintaan HTTP dan Membalas Mesej JSON menggunakan HttpClient?

Bagaimana untuk Log Permintaan HTTP dan Membalas Mesej JSON menggunakan HttpClient?

Patricia Arquette
Lepaskan: 2024-12-31 14:22:10
asal
344 orang telah melayarinya

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

Melog Permintaan HTTP dan Mesej Respons menggunakan HttpClient

Dalam situasi di mana anda perlu menangkap permintaan dan mesej respons semasa komunikasi HTTP menggunakan HttpClient, pembalakan menjadi penting. Pertimbangkan coretan kod berikut:

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

if (response.IsSuccessStatusCode)
{
    return await response.Content.ReadAsAsync<T>();
}
Salin selepas log masuk

Sekarang, mari kita terokai cara mendapatkan muatan JSON yang dihantar dalam objek 'entiti' tanpa mensirikannya secara manual.

Penyelesaian: Pengelogan Tersuai Pengendali

Untuk memintas dan log permintaan dan mesej respons, anda boleh membuat tersuai pengendali pembalakan yang melilit HttpClientHandler. Pengendali ini akan memintas permintaan sebelum HttpClientHandler memprosesnya. Contoh pelaksanaan boleh:

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;
    }
}
Salin selepas log masuk

Dalam pengendali ini:

  • Console.WriteLine(request.Content.ReadAsStringAsync()) membaca kandungan permintaan, yang menyebabkan pemformat sirikan objek entiti ke dalam JSON.
  • Console.WriteLine(response.Content.ReadAsStringAsync()) melakukan perkara yang sama untuk kandungan respons.

Merantai Pengendali Pengelogan dengan HttpClient

Untuk menggunakan pengendali pembalakan, anda perlu merantainya kepada anda HttpClient:

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

Contoh Output

Output kod di atas akan kelihatan seperti ini:

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!"
Salin selepas log masuk

Dengan menggunakan pendekatan ini, anda boleh log permintaan dan respons mesej JSON dengan berkesan semasa panggilan HTTP dibuat dengan HttpClient, memberikan pandangan berharga untuk penyahpepijatan dan tujuan penyelesaian masalah.

Atas ialah kandungan terperinci Bagaimana untuk Log Permintaan HTTP dan Membalas Mesej JSON menggunakan HttpClient?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan