package main import ( "log" "net/http" "io" "flag" "fmt" ) var rawBody = false func handle(w http.ResponseWriter, r *http.Request) { log.Println("URL:", r.URL) log.Println("METHOD:", r.Method) log.Println("HEADERS:") h := r.Header for k, v := range h { log.Println(k, v) } if (!rawBody) { log.Println("FORMDATA (query + post form data):") err := r.ParseForm() if err != nil { panic(err) } f := r.Form for k, v := range f { log.Println(k, v) } } else { log.Println("QUERIES:") q := r.URL.Query() for k, v := range q { log.Println(k, v) } b, err := io.ReadAll(r.Body) if err != nil { panic(err) } log.Println("BODY:", string(b)) } log.Println("--------------------------------------") } func main() { b := flag.Bool("b", false, "Read raw body") p := flag.Int("p", 8080, "Port to use") flag.Parse() rawBody = *b http.HandleFunc("/", handle) log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *p), nil)) }