background/vendor/git.jiaxianghudong.com/go/utils/http_helper.go

145 lines
2.6 KiB
Go

package utils
import (
"bytes"
"strings"
"crypto/tls"
"errors"
"fmt"
"io/ioutil"
"net/http"
"net/url"
)
// Get
func Get(apiUrl string, parm map[string]string, header map[string]string, isHttps bool) ([]byte, error) {
if len(parm) > 0 {
apiUrl = fmt.Sprintf("%s%s", apiUrl, "?")
p := ""
for k, v := range parm {
if p == "" {
p = fmt.Sprintf("%s=%s", k, v)
} else {
p = fmt.Sprintf("%s&%s=%s", p, k, v)
}
}
apiUrl = fmt.Sprintf("%s%s", apiUrl, p)
}
client := &http.Client{}
if isHttps {
client.Transport = &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
}
reqest, _ := http.NewRequest("GET", apiUrl, nil)
for k, v := range header {
reqest.Header.Set(k, v)
}
response, err := client.Do(reqest)
if nil != err {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New(response.Status)
}
body, err := ioutil.ReadAll(response.Body)
if nil != err {
return nil, err
}
return body, nil
}
// post
func Post(apiUrl string, data []byte, header map[string]string, isHttps bool) ([]byte, error) {
client := &http.Client{}
if isHttps {
client.Transport = &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
}
reqest, _ := http.NewRequest("POST", apiUrl, bytes.NewReader(data))
for k, v := range header {
reqest.Header.Set(k, v)
}
response, err := client.Do(reqest)
if nil != err {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New(response.Status)
}
body, err := ioutil.ReadAll(response.Body)
if nil != err {
return nil, err
}
return body, nil
}
// post
func PostMap(apiUrl string, parm map[string]string, header map[string]string, isHttps bool) ([]byte, error) {
data := url.Values{}
for k, v := range parm {
data.Set(k, v)
}
reqParams := ioutil.NopCloser(strings.NewReader(data.Encode()))
client := &http.Client{}
if isHttps {
client.Transport = &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
}
reqest, _ := http.NewRequest("POST", apiUrl, reqParams)
for k, v := range header {
reqest.Header.Set(k, v)
}
response, err := client.Do(reqest)
if nil != err {
return nil, err
}
defer response.Body.Close()
if response.StatusCode != 200 {
return nil, errors.New(response.Status)
}
body, err := ioutil.ReadAll(response.Body)
if nil != err {
return nil, err
}
return body, nil
}
// 获取远程ip
func GetRemoteIP(r *http.Request) string {
addr := r.Header.Get("Remote_addr")
if addr == "" {
addr = r.RemoteAddr
}
return strings.Split(addr, ":")[0]
}