package main import ( "flag" "fmt" "html" "log" "net/http" "sort" ) func RequestHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "\"Host\": %q\n", html.EscapeString(r.Host)) fmt.Fprintf(w, "\"IP\": %q\n", html.EscapeString(r.RemoteAddr)) fmt.Fprintf(w, "\"Method\": %q\n", html.EscapeString(r.Method)) fmt.Fprintf(w, "\"Proto\": %q\n", html.EscapeString(r.Proto)) fmt.Fprintf(w, "\"URI\": %q\n", html.EscapeString(r.RequestURI)) keys := make([]string, 0) for k, _ := range r.Header { keys = append(keys, k) } sort.Strings(keys) for _, k := range keys { for _, value := range r.Header[k] { fmt.Fprintf(w, "%q: %q\n", html.EscapeString(k), html.EscapeString(value)) } } } func main() { var ( host string port uint64 ) flag.StringVar(&host, "host", "127.0.0.1", "IP address to listen on") flag.Uint64Var(&port, "port", 8080, "Port to listen on (default 8080)") flag.Parse() http.HandleFunc("/", RequestHandler) fmt.Printf("Listening on %v port %v (http://%v:%v/)\n", host, port, host, port) log.Fatal(http.ListenAndServe(fmt.Sprintf("%s:%d", host, port), nil)) }