golang
echo

Echo で HTTP リクエストヘッダをミドルウェアでダンプする

Echo で実装した Web アプリケーションにおいて、リバースプロキシ経由のアクセスで X-Forwarded-For ヘッダが付いているか確認するために HTTP リクエストヘッダを標準出力にダンプする処理をミドルウェアで書いた。

ミドルウェアは、無名関数でサクッと書けるので便利。

package main

import (
    "github.com/labstack/echo"
    "fmt"
    "log"
    "os"
)

func main() {
    e := echo.New()
    e.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
        return func(c echo.Context) error {
            if err := next(c); err != nil {
                c.Error(err)
            }

            output := fmt.Sprintf("%#v", c.Request().Header)

            os.Stdout.Write([]byte(output + "\n"))
            return next(c)
        }
    })

    log.Fatal(e.Start(":9001"))
}

ローカルで実行して、ブラウザでアクセスすると下記のように出力される。

http.Header{"Cache-Control":[]string{"max-age=0"}, "User-Agent":[]string{"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}, "Accept":[]string{"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"}, "Accept-Encoding":[]string{"gzip, deflate, br"}, "Accept-Language":[]string{"ja,en-US;q=0.9,en;q=0.8"}, "Connection":[]string{"keep-alive"}, "Upgrade-Insecure-Requests":[]string{"1"}}