package net import ( "bytes" "context" "encoding/json" "io" "net/http" "time" ) type Client struct { client *http.Client } func NewClient() *Client { return &Client{client: &http.Client{ Timeout: time.Minute * 5, }} } func (c *Client) Get(ctx context.Context, url string) (string, error) { req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { return "", err } resp, err := c.client.Do(req) if err != nil { return "", err } defer func(Body io.ReadCloser) { _ = Body.Close() }(resp.Body) body, err := io.ReadAll(resp.Body) if err != nil { return "", err } return string(body), nil } func (c *Client) Post(ctx context.Context, headers map[string]string, url string, body any, target any) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(body); err != nil { return err } req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, &buf) if err != nil { return err } for k, v := range headers { req.Header.Set(k, v) } resp, err := c.client.Do(req) if err != nil { return err } defer func(Body io.ReadCloser) { _ = Body.Close() }(resp.Body) if err := json.NewDecoder(resp.Body).Decode(target); err != nil { return err } return nil }