diff --git a/dump.go b/dump.go index b7f5cee..da5c07f 100644 --- a/dump.go +++ b/dump.go @@ -30,36 +30,21 @@ func httpDump(reqDump []byte, resp *http.Response) { } fmt.Println(Green("Request:"), respStatusStr) req, _ := ParseReq(reqDump) - // for k, v := range req { - // fmt.Println(k, ":::::", v) - // } - fmt.Printf("%s %s %s\n", Blue(req.Method), req.RequestURI, respStatusStr) + fmt.Printf("%s %s %s\n", Blue(req.Method), req.Host+req.RequestURI, respStatusStr) for headerName, headerContext := range req.Header { fmt.Printf("%s: %s\n", Blue(headerName), headerContext) } - fmt.Printf("req:---->%#v\n", req) if req.Method == "POST" { - fmt.Println(Green("URLEncoded form")) - fmt.Println(reqDump) - body, err := ioutil.ReadAll(req.Body) + fmt.Println(Green("POST Param:")) + err := req.ParseForm() if err != nil { - fmt.Println("readall ", err) + logger.Println("parseForm error:", err) + } else { + for k, v := range req.Form { + fmt.Printf("\t%s: %s\n", Blue(k), v) + } } - fmt.Println(string(body)) - // err := req.ParseForm() - // if err != nil { - // logger.Println("parseForm error:", err) - // } else { - // for k, v := range req.Form { - // fmt.Printf("%s: %s\n", Blue(k), v) - // } - // } - // values, _ := ParsePostValues(reqDump) - // for k, v := range values { - // fmt.Printf("%s: %s\n", Blue(k), v) - // } - } fmt.Println(Green("Response:")) for headerName, headerContext := range resp.Header { diff --git a/mitm.go b/mitm.go index 4817d3a..bbd8337 100644 --- a/mitm.go +++ b/mitm.go @@ -101,8 +101,14 @@ func (hw *HandlerWrapper) DumpHTTPAndHTTPs(resp http.ResponseWriter, req *http.R req.Header.Del("Proxy-Connection") req.Header.Set("Connection", "Keep-Alive") + var reqDump []byte + var err error + ch := make(chan bool) // handle connection - reqDump, err := httputil.DumpRequest(req, true) + go func() { + reqDump, err = httputil.DumpRequestOut(req, true) + ch <- true + }() if err != nil { logger.Println("DumpRequest error ", err) } @@ -177,7 +183,10 @@ func (hw *HandlerWrapper) DumpHTTPAndHTTPs(resp http.ResponseWriter, req *http.R } if *hw.MyConfig.Monitor { + <-ch go httpDump(reqDump, respOut) + } else { + <-ch } }