package api import ( "bytes" "crypto/tls" "encoding/json" "net/http" ) type HttpClient struct { baseURL string userAgent string } func NewHttpClient(apiURL string) *HttpClient { return &HttpClient{baseURL: apiURL, userAgent: "internal-http-client"} } func (c *HttpClient) SendGet(api, url string, data, out any) error { res, err := c.sendRequest(api, url, http.MethodGet, data) if err != nil { return err } decoder := json.NewDecoder(res.Body) err = decoder.Decode(&out) if err != nil { return err } return nil } func (c *HttpClient) SendPost(api, url string, data, out any) (any, error) { res, err := c.sendRequest(api, url, http.MethodPost, data) if err != nil { return nil, err } decoder := json.NewDecoder(res.Body) err = decoder.Decode(out) if err != nil { return nil, err } return out, nil } func (c *HttpClient) sendRequest(api, url, method string, data any) (*http.Response, error) { apiUrl := api + url // FIXME tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // FIXME } // Create an HTTP client with the custom transport client := &http.Client{Transport: tr} // FIXME json, err := json.Marshal(&data) if err != nil { return nil, err } req, err := http.NewRequest(method, apiUrl, bytes.NewBuffer(json)) if err != nil { return nil, err } req.Header.Set("Content-Type", "application/json") req.Header.Set("User-Agent", c.userAgent) res, err := client.Do(req) if err != nil { return nil, err } defer res.Body.Close() return res, nil }