私は自分のlogginMiddlewareを書いています。基本的に、リクエストの本文と応答を記録する必要があります。私が直面した問題は、本文を読むと空になり、二度読むことができないことです。タイプがReadCloserであるために発生することを理解しています。体を最初に巻き戻す方法はありますか?
RequestパッケージのGetBody
を使用できます。
Net/httpの request.go からのソースコードでこのコメントを見てください:
GetBodyは、Bodyの新しいコピーを返すオプションのfuncを定義します。リダイレクトで本文を複数回読み取る必要がある場合に、クライアント要求に使用されます。 GetBodyを使用するには、引き続きBodyを設定する必要があります。サーバー要求の場合は使用されません。」
GetBody func() (io.ReadCloser, error)
これにより、空にせずにボディリクエストを取得できます。
サンプル:
getBody := request.GetBody
copyBody, err := getBody()
if err != nil {
// Do something return err
}
http.DefaultClient.Do(request)