66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package httpclient
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
// HTTPClient interface
|
|
type HTTPClient interface {
|
|
Do(req *http.Request) (*http.Response, error)
|
|
}
|
|
|
|
// Global
|
|
var (
|
|
Client HTTPClient
|
|
)
|
|
|
|
func init() {
|
|
Client = &http.Client{Timeout: 10 * time.Second}
|
|
}
|
|
|
|
// Get sends a get request to the URL
|
|
func Get(url string, headers http.Header) (*http.Response, error) {
|
|
request, err := http.NewRequest(http.MethodGet, url, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
request.Header = headers
|
|
return Client.Do(request)
|
|
}
|
|
|
|
// Post sends a post request to the URL with the body
|
|
func Post(url string, body interface{}, headers http.Header) (*http.Response, error) {
|
|
jsonBytes, err := json.Marshal(body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
request, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(jsonBytes))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
request.Header = headers
|
|
return Client.Do(request)
|
|
}
|
|
|
|
// Delete sends a delete request to the URL with the body
|
|
func Delete(url string, body interface{}, headers http.Header) (*http.Response, error) {
|
|
jsonBytes, err := json.Marshal(body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
request, err := http.NewRequest(http.MethodDelete, url, bytes.NewReader(jsonBytes))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
request.Header = headers
|
|
return Client.Do(request)
|
|
}
|
|
|
|
// Do sends the request
|
|
func Do(request *http.Request) (*http.Response, error) {
|
|
return Client.Do(request)
|
|
}
|