echoserver.go
Download
package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
)

func main() {
	// curl -SsLD- -X POST -H 'Content-Type: text/plain' -d $'hello\n' 'http://localhost:8080/hello?a=1&a=2'
	// curl -SsLD- -X POST -F b=3 'http://localhost:8080/hello?a=1&a=2'

	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		writer := io.MultiWriter(os.Stdout, w)
		fmt.Print("\033[2J\033[H")

		fmt.Fprintln(writer, "url:\n````")
		fmt.Fprintf(writer, "\t%+v\n", r.URL)

		fmt.Fprintln(writer, "```\n\nheaders:\n```")
		for k, v := range r.Header {
			fmt.Fprintln(writer, "\t", k, v)
		}
		fmt.Fprintln(writer, "```\n\nquerystring:\n````")
		for k, v := range r.URL.Query() {
			fmt.Fprintln(writer, "\t", k, v)
		}
		fmt.Fprintln(writer, "```\n\nform:\n````")
		// r.ParseForm()
		r.ParseMultipartForm(32 << 20)
		for k, v := range r.PostForm {
			fmt.Fprintln(writer, "\t", k, v)
		}
		fmt.Fprintln(writer, "```\n\nbody:\n```")
		io.Copy(writer, r.Body)
		fmt.Fprintln(writer, "```")
	})
	log.Println(http.ListenAndServe(":8080", nil))
}