X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=capifcore%2Finternal%2Frestclient%2FHTTPClient.go;h=0dc2f24894b63130a5bedb1ad0393ed34969bc57;hb=c1d23cc476433ecf2fab9d43cda75376e1294b0d;hp=de0ad1d0ca26706802f1b598126f7d44beb18d82;hpb=2effa31635f1b8349c02b4c1c546bfc67e8797d3;p=nonrtric%2Fplt%2Fsme.git diff --git a/capifcore/internal/restclient/HTTPClient.go b/capifcore/internal/restclient/HTTPClient.go index de0ad1d..0dc2f24 100644 --- a/capifcore/internal/restclient/HTTPClient.go +++ b/capifcore/internal/restclient/HTTPClient.go @@ -33,6 +33,7 @@ const ContentTypePlain = "text/plain" //go:generate mockery --name HTTPClient type HTTPClient interface { Do(*http.Request) (*http.Response, error) + Get(url string) (*http.Response, error) } type RequestError struct { @@ -44,24 +45,54 @@ func (pe RequestError) Error() string { return fmt.Sprintf("Request failed due to error response with status: %v and body: %v", pe.StatusCode, string(pe.Body)) } +func Get(url string, header map[string]string, client HTTPClient) ([]byte, error) { + return do(http.MethodGet, url, nil, header, client) +} + func Put(url string, body []byte, client HTTPClient) error { - return do(http.MethodPut, url, body, ContentTypeJSON, client) + var header = map[string]string{"Content-Type": ContentTypeJSON} + _, err := do(http.MethodPut, url, body, header, client) + return err +} + +func Post(url string, body []byte, header map[string]string, client HTTPClient) error { + _, err := do(http.MethodPost, url, body, header, client) + return err } -func do(method string, url string, body []byte, contentType string, client HTTPClient) error { - if req, reqErr := http.NewRequest(method, url, bytes.NewBuffer(body)); reqErr == nil { - req.Header.Set("Content-Type", contentType) +func do(method string, url string, body []byte, header map[string]string, client HTTPClient) ([]byte, error) { + if req, reqErr := http.NewRequest(method, url, nil); reqErr == nil { + if len(header) > 0 { + setHeader(req, header) + } + if body != nil { + req.Body = io.NopCloser(bytes.NewReader(body)) + } + if response, respErr := client.Do(req); respErr == nil { if isResponseSuccess(response.StatusCode) { - return nil + defer response.Body.Close() + + // Read the response body + respBody, err := io.ReadAll(response.Body) + if err != nil { + return nil, err + } + return respBody, nil } else { - return getRequestError(response) + return nil, getRequestError(response) } } else { - return respErr + return nil, respErr } } else { - return reqErr + return nil, reqErr + } +} + +func setHeader(req *http.Request, header map[string]string) { + for key, element := range header { + req.Header.Set(key, element) } }