From d3e06137e1dd449de5c65062f53d1b7a0fe8a6dc Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Thu, 24 Dec 2020 03:04:29 +0000 Subject: [PATCH] feat: write a http-echo-server in go for fun --- bin/http-echo-server.go | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 bin/http-echo-server.go diff --git a/bin/http-echo-server.go b/bin/http-echo-server.go new file mode 100755 index 0000000..2c52495 --- /dev/null +++ b/bin/http-echo-server.go @@ -0,0 +1,44 @@ +/// 2>/dev/null; gorun "$0" "$@" ; exit $? +package main + +import ( + "flag" + "fmt" + "io/ioutil" + "log" + "net/http" + "strconv" + "strings" +) + +var ( + port = flag.Int("p", 8080, "port to listen to") + bind = flag.String("b", "127.0.0.1", "address to bind to") +) + +func echoHandler(w http.ResponseWriter, req *http.Request) { + fmt.Println("\n<----- Request Start ----->") + fmt.Printf("%s %s\n", req.Method, req.URL.String()) + for h, v := range req.Header { + fmt.Printf("%s: %s\n", h, strings.Join(v, ", ")) + } + + body, _ := ioutil.ReadAll(req.Body) + if len(body) > 0 { + fmt.Println() + fmt.Println(string(body)) + } + + fmt.Println("<----- Request End ----->") + w.WriteHeader(http.StatusOK) +} + +func main() { + flag.Parse() + + http.HandleFunc("/", echoHandler) + + address := (*bind) + ":" + (strconv.Itoa(*port)) + fmt.Printf("Listening on %s\n", address) + log.Fatal(http.ListenAndServe(address, nil)) +}