Files
smsc/request.go
2026-01-31 19:30:41 +03:00

67 lines
1.5 KiB
Go

package smsc
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func httpRequest(req *http.Request, resp any) error {
client := &http.Client{}
httpResp, err := client.Do(req)
if err != nil {
return fmt.Errorf("http request error: %w", err)
}
defer httpResp.Body.Close()
body, err := io.ReadAll(httpResp.Body)
if err != nil {
return fmt.Errorf("http response read error: %w", err)
}
//log.Println(string(body))
if err = json.Unmarshal(body, resp); err != nil {
var rErr Response
if err = json.Unmarshal(body, &rErr); err == nil && rErr.ErrorCode != 0 {
return fmt.Errorf("error %d: %s", rErr.ErrorCode, rErr.Error)
}
err = fmt.Errorf("http response unmarshal error: %w", err)
}
return err
}
func requestPost(url string, req, resp any) error {
reqData, err := json.Marshal(req)
if err != nil {
return fmt.Errorf("request marshal error: %w", err)
}
httpReq, err := http.NewRequest("POST", url, bytes.NewReader(reqData))
if err != nil {
return fmt.Errorf("http request create error: %w", err)
}
httpReq.Header.Set("Content-Type", "application/json")
httpReq.Header.Set("Accept", "application/json")
err = httpRequest(httpReq, resp)
return err
}
func requestGet(url, apiKey string, params url.Values, resp any) error {
httpReq, err := http.NewRequest("GET", url, nil)
if err != nil {
return fmt.Errorf("http request create error: %w", err)
}
httpReq.URL.RawQuery = params.Encode()
httpReq.Header.Set("Accept", "application/json")
err = httpRequest(httpReq, resp)
return err
}