ホームページ >バックエンド開発 >C++ >HttpClient を使用して HTTP リクエストとレスポンスの JSON メッセージを記録するにはどうすればよいですか?

HttpClient を使用して HTTP リクエストとレスポンスの JSON メッセージを記録するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-31 14:22:10353ブラウズ

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

HttpClient を使用した HTTP リクエストおよび応答メッセージのログ記録

HttpClient を使用した HTTP 通信中にリクエストおよび応答メッセージをキャプチャする必要がある状況では、ログ記録が不可欠になります。次のコード スニペットを考えてみましょう:

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

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

次に、手動でシリアル化せずに、'entity' オブジェクト内で送信された JSON ペイロードを取得する方法を見てみましょう。

解決策: カスタム ログHandler

リクエストとレスポンスのメッセージをインターセプトしてログに記録するには、次のようなカスタム ロギング ハンドラーを作成できます。 HttpClientHandler をラップします。このハンドラーは、HttpClientHandler がリクエストを処理する前にリクエストをインターセプトします。実装例は次のとおりです。

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

このハンドラー内:

  • Console.WriteLine(request.Content.ReadAsStringAsync()) はリクエストのコンテンツを読み取り、フォーマッタに次のことを行わせます。エンティティオブジェクトをシリアル化して、 JSON.
  • Console.WriteLine(response.Content.ReadAsStringAsync()) は、応答コンテンツに対して同じことを行います。

HttpClient とのログ ハンドラーのチェーン

ロギング ハンドラーを使用するには、ロギング ハンドラーをHttpClient:

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

出力例

上記のコードの出力は次のようになります:

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

このアプローチを利用すると、 HttpClient で行われた HTTP 呼び出し中にリクエストとレスポンスの JSON メッセージを効果的にログに記録できるため、デバッグに貴重な洞察が得られます。およびトラブルシューティングの目的。

以上がHttpClient を使用して HTTP リクエストとレスポンスの JSON メッセージを記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。