123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package helpers
- import (
- "context"
- "fmt"
- "io"
- "net/http"
- "time"
- )
- var (
- ErrCurlGetStatus = errCurlGetStatus(0, 0)
- )
- func errCurlGetStatus(e, r int) error {
- return &curlGetStatusError{
- expected: e,
- received: r,
- }
- }
- type curlGetStatusError struct {
- expected int
- received int
- }
- func (c *curlGetStatusError) Error() string {
- return fmt.Sprintf("CurlGet: expected %d, received %d", c.received, c.expected)
- }
- func CurlGet(ctx context.Context, url string, timeout time.Duration) ([]byte, error) {
- var b []byte
- ctx, cancel := context.WithTimeout(ctx, timeout)
- defer cancel()
- req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
- if err != nil {
- return b, err
- }
- rcl := &http.Client{}
- var resp *http.Response
- resp, err = rcl.Do(req)
- if err != nil {
- return b, err
- }
- defer resp.Body.Close()
- if resp.StatusCode != http.StatusOK {
- return b, errCurlGetStatus(
- http.StatusOK,
- resp.StatusCode,
- )
- }
- b, err = io.ReadAll(resp.Body)
- if err != nil {
- return b, err
- }
- return b, nil
- }
|