web-dev-qa-db-ja.com

Golangの読み取りリクエストの本文

私は自分のlogginMiddlewareを書いています。基本的に、リクエストの本文と応答を記録する必要があります。私が直面した問題は、本文を読むと空になり、二度読むことができないことです。タイプがReadCloserであるために発生することを理解しています。体を最初に巻き戻す方法はありますか?

44

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)
1
Yuri Giovani