package main import ( "bufio" "bytes" "fmt" "io/ioutil" "net/http" "os" "strconv" ) func main() { for { res := http.Response{ Proto: "HTTP/1.1", ProtoMajor: 1, ProtoMinor: 1, StatusCode: 200, Status: "OK", } r := bufio.NewReader(os.Stdin) req, err := http.ReadRequest(r) var buf bytes.Buffer if err != nil { res.StatusCode = 500 res.Status = http.StatusText(res.StatusCode) fmt.Fprintln(&buf, err) } else { l, _ := strconv.Atoi(req.Header.Get("Content-Length")) p := make([]byte, l) r.Read(p) fmt.Fprintf(&buf, "Hello %s\n", p) for k, vs := range req.Header { fmt.Fprintf(&buf, "ENV: %s %#v\n", k, vs) } } res.Body = ioutil.NopCloser(&buf) res.ContentLength = int64(buf.Len()) res.Write(os.Stdout) } }