q5/httpcli.go
aozhiwei dd6cf60934 1
2024-07-10 14:20:26 +08:00

121 lines
2.5 KiB
Go

package q5
import (
"errors"
"io/ioutil"
"net/http"
net_url "net/url"
"strings"
)
const (
HTTP_OPT_ADD_HEADER = iota
HTTP_OPT_SET_PROXY = iota
)
const (
HTTP_HEADER_JSON = "application/json"
)
func internalSetOpt(client *http.Client, request *http.Request, opt int32,
key string, val string) {
switch opt {
case HTTP_OPT_ADD_HEADER:
request.Header.Add(key, val)
default:
panic("error http opt")
}
}
func HttpGet(url string, params map[string]string) (string, error) {
return HttpGetEx(url, params, nil)
}
func HttpGetEx(url string, params map[string]string,
initFunc func(setOpt func(int32, string, string))) (string, error) {
if !StrContains(url, "?") {
url = url + "?"
}
{
u := net_url.Values{}
for key, val := range params {
u.Set(key, val)
}
url = url + u.Encode()
}
client := &http.Client{}
request, err := http.NewRequest("GET", url, nil)
if err != nil {
panic("http.NewRequest error")
}
if initFunc != nil {
initFunc(func(opt int32, key string, val string) {
internalSetOpt(client, request, opt, key, val)
})
}
if resp, err := client.Do(request); err == nil {
if resp.StatusCode != 200 {
return "", errors.New("HttpGet error Status:" + resp.Status)
}
defer resp.Body.Close()
if bytes, err := ioutil.ReadAll(resp.Body); err == nil {
return string(bytes), nil
} else {
return "", err
}
} else {
return "", err
}
}
func HttpGetEx2(url string, params map[string]string) (*http.Response, string, error) {
if !StrContains(url, "?") {
url = url + "?"
}
{
u := net_url.Values{}
for key, val := range params {
u.Set(key, val)
}
url = url + u.Encode()
}
client := &http.Client{}
request, err := http.NewRequest("GET", url, nil)
if err != nil {
panic("http.NewRequest error")
}
if resp, err := client.Do(request); err == nil {
defer resp.Body.Close()
if bytes, err := ioutil.ReadAll(resp.Body); err == nil {
return resp, string(bytes), nil
} else {
return resp, "", err
}
} else {
return nil, "", err
}
}
func HttpPost(url string, params map[string]string, contentType string, body string) (string, error) {
if !StrContains(url, "?") {
url = url + "?"
}
{
u := net_url.Values{}
for key, val := range params {
u.Set(key, val)
}
url = url + u.Encode()
}
resp, err := http.Post(url, contentType, strings.NewReader(body))
if err != nil {
return "", err
}
defer resp.Body.Close()
if bytes, err := ioutil.ReadAll(resp.Body); err == nil {
return string(bytes), nil
} else {
return "", err
}
}