diff --git a/http-multicaster.go b/http-multicaster.go index 349b24f..33f36e7 100644 --- a/http-multicaster.go +++ b/http-multicaster.go @@ -18,7 +18,8 @@ func forwardRequestToBackend(wg *sync.WaitGroup, client *http.Client, backend st /* Recreate the request with same Method, path,query and Body, but to the specified backend */ - forwardReq, err := http.NewRequest(req.Method, backend, req.Body) + forwardReqStr := fmt.Sprintf("http://%s%s",backend,req.RequestURI) + forwardReq, err := http.NewRequest(req.Method, forwardReqStr, req.Body) if err != nil { log.Printf("Error creating request for %s: %v", backend, err) responses <- fmt.Sprintf("Failed: %v", err) @@ -27,8 +28,6 @@ func forwardRequestToBackend(wg *sync.WaitGroup, client *http.Client, backend st // Override Host with original Host forwardReq.Host = req.Host - // Override RequestURI - forwardReq.RequestURI = req.RequestURI // Add original headers forwardReq.Header = req.Header.Clone() @@ -41,6 +40,7 @@ func forwardRequestToBackend(wg *sync.WaitGroup, client *http.Client, backend st } defer resp.Body.Close() + // Read response body _, err = io.ReadAll(resp.Body) if err != nil { @@ -49,8 +49,12 @@ func forwardRequestToBackend(wg *sync.WaitGroup, client *http.Client, backend st return } + if resp.StatusCode >= 400 { + responses <- fmt.Sprintf("%s failed %d", backend, resp.StatusCode) + return + } // Ajouter la réponse dans le canal - responses <- fmt.Sprintf("%s succeeded", backend) + responses <- fmt.Sprintf("%s succeeded %d", backend, resp.StatusCode) } /* @@ -81,15 +85,13 @@ func handler(w http.ResponseWriter, req *http.Request) { func debugHandler(w http.ResponseWriter, req *http.Request) { backend := "127.0.0.1:8080" /* Recreate the request with same Method, path,query and Body, but to the specified backend */ - backendRequest := fmt.Sprintf("http://%s%s", backend, req.RequestURI) - fmt.Println("Backend Request", ":", backendRequest) - forwardReq, err := http.NewRequest(req.Method, backendRequest, req.Body) + forwardReqStr := fmt.Sprintf("http://%s%s",backend,req.RequestURI) + forwardReq, err := http.NewRequest(req.Method, forwardReqStr, req.Body) if err != nil { log.Printf("Error creating request for %s: %v", backend, err) return } forwardReq.Host = req.Host - forwardReq.RequestURI = req.RequestURI forwardReq.Header = req.Header.Clone() fmt.Printf("%#v\n", req)