package main import ( "fmt" "log" "net/http" "slices" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { log.Print(r) fmt.Fprintf(w, "Method: %v\n", r.Method) fmt.Fprintf(w, "URL: %v\n", r.URL) fmt.Fprintf(w, "Proto: %v\n", r.Proto) fmt.Fprintf(w, "Header:\n") for _, key := range headerSortedKeys(r.Header) { value := r.Header[key] fmt.Fprintf(w, "\t%v: ", key) for _, v := range value { fmt.Fprintf(w, "'%v' ", v) } fmt.Fprintf(w, "\n") } fmt.Fprintf(w, "RemoteAddr: %v\n", r.RemoteAddr) }) if err := http.ListenAndServe(":8000", nil); err != nil { log.Fatalf("failed to listen and serve: %v", err) } } func headerSortedKeys(header http.Header) []string { keys := []string{} for key := range header { keys = append(keys, key) } slices.Sort(keys) return keys }