Files
easy_go_module/httpx/httpx.go
2026-05-06 14:53:45 +08:00

61 lines
1.2 KiB
Go

package httpx
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"strings"
"time"
)
type Client struct {
HTTP *http.Client
}
func New(timeout time.Duration) *Client {
return &Client{HTTP: &http.Client{Timeout: timeout}}
}
func Wrap(client *http.Client) *Client {
if client == nil {
client = http.DefaultClient
}
return &Client{HTTP: client}
}
func (c *Client) GetBytes(target string) ([]byte, int, error) {
resp, err := c.HTTP.Get(target)
if err != nil {
return nil, 0, err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
return body, resp.StatusCode, err
}
func (c *Client) PostJSON(target string, data any) ([]byte, int, error) {
body, err := json.Marshal(data)
if err != nil {
return nil, 0, err
}
resp, err := c.HTTP.Post(target, "application/json", bytes.NewReader(body))
if err != nil {
return nil, 0, err
}
defer resp.Body.Close()
respBody, err := io.ReadAll(resp.Body)
return respBody, resp.StatusCode, err
}
func MustOK(body []byte, status int, err error) error {
if err != nil {
return err
}
if status >= http.StatusMultipleChoices {
return fmt.Errorf("http status=%d body=%s", status, strings.TrimSpace(string(body)))
}
return nil
}