@@ -3,6 +3,7 @@ package http
33import (
44 "fmt"
55 "net/http"
6+ "net/url"
67 "strings"
78 "time"
89
@@ -59,13 +60,24 @@ func (h *HTTPManager) ExecuteRequest(req *Request) (*Response, error) {
5960
6061 log .Debug ("executing HTTP request" , "method" , req .Method , "url" , req .URL )
6162
63+ requestURL , err := h .buildURL (req .URL , req .QueryParams )
64+ if err != nil {
65+ log .Error ("failed to build URL" , "error" , err )
66+ return nil , fmt .Errorf ("failed to build URL: %w" , err )
67+ }
68+
6269 start := time .Now ()
63- httpReq , err := http .NewRequest (strings .ToUpper (req .Method ), req . URL , nil )
70+ httpReq , err := http .NewRequest (strings .ToUpper (req .Method ), requestURL , nil )
6471 if err != nil {
6572 log .Error ("failed to create HTTP request" , "error" , err )
6673 return nil , fmt .Errorf ("failed to create request: %w" , err )
6774 }
6875
76+ if err := h .setHeaders (httpReq , req .Headers ); err != nil {
77+ log .Error ("failed to set headers" , "error" , err )
78+ return nil , fmt .Errorf ("failed to set headers: %w" , err )
79+ }
80+
6981 resp , err := h .Client .Do (httpReq )
7082 if err != nil {
7183 log .Error ("HTTP request failed" , "error" , err )
@@ -85,3 +97,32 @@ func (h *HTTPManager) ExecuteRequest(req *Request) (*Response, error) {
8597 log .Info ("HTTP request completed" , "status" , resp .StatusCode , "duration" , duration )
8698 return response , nil
8799}
100+
101+ func (h * HTTPManager ) buildURL (baseURL string , queryParams map [string ]string ) (string , error ) {
102+ if len (queryParams ) == 0 {
103+ return baseURL , nil
104+ }
105+
106+ parsedURL , err := url .Parse (baseURL )
107+ if err != nil {
108+ return "" , err
109+ }
110+
111+ values := parsedURL .Query ()
112+ for key , value := range queryParams {
113+ values .Set (key , value )
114+ }
115+ parsedURL .RawQuery = values .Encode ()
116+
117+ return parsedURL .String (), nil
118+ }
119+
120+ func (h * HTTPManager ) setHeaders (req * http.Request , headers map [string ]string ) error {
121+ for key , value := range headers {
122+ if strings .TrimSpace (key ) == "" {
123+ return fmt .Errorf ("header key cannot be empty" )
124+ }
125+ req .Header .Set (key , value )
126+ }
127+ return nil
128+ }
0 commit comments