q5/httpcli.go
2023-10-25 15:46:41 +08:00

95 lines
2.0 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
)
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 HttpGetAsJson(url string, params map[string]string) (map, string, error) {
respStr, err := HttpGet(url, params)
if err != nil {
return nil, respStr, err
}
respObj := NewXoFromJsonStr(respStr)
if !respObj.IsObject() {
return nil, respStr, errors.New("HttpGetAsJson error invalid json format")
}
return respObj, respStr, err
}
func HttpPostContent(url string, contentType string, body string, response *string) (error) {
*response = ""
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 {
*response = string(bytes)
return nil
} else {
return err
}
}
*/