105 lines
2.4 KiB
Plaintext
105 lines
2.4 KiB
Plaintext
|
|
package webUtil
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"crypto/tls"
|
|||
|
|
"fmt"
|
|||
|
|
"net"
|
|||
|
|
"net/http"
|
|||
|
|
"sort"
|
|||
|
|
"time"
|
|||
|
|
|
|||
|
|
"goutil/netUtil"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 获取请求的IP(obsolete, 直接调用netUtil.GetHttpAddr)
|
|||
|
|
// 返回值:
|
|||
|
|
// 请求的IP
|
|||
|
|
func GetRequestIP(r *http.Request) string {
|
|||
|
|
/*
|
|||
|
|
http中调用JoinHostPort来给RemoteAddr赋值;它的规则如下:
|
|||
|
|
JoinHostPort combines host and port into a network address of the
|
|||
|
|
form "host:port" or, if host contains a colon or a percent sign,
|
|||
|
|
"[host]:port".
|
|||
|
|
|
|||
|
|
所以现在要将RemoteAddr解析成host和port,则需要找到最后一个:,前面的部分则是host;
|
|||
|
|
如果host包含[],则需要去除
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
return netUtil.GetHttpAddr(r).Host
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func NewTransport() *http.Transport {
|
|||
|
|
return &http.Transport{}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// timeout 超时时间
|
|||
|
|
func GetTimeoutTransport(transport *http.Transport, timeout int) *http.Transport {
|
|||
|
|
transport.Dial = func(netw, addr string) (net.Conn, error) {
|
|||
|
|
deadline := time.Now().Add(time.Duration(timeout) * time.Second)
|
|||
|
|
c, err := net.DialTimeout(netw, addr, time.Second*time.Duration(timeout))
|
|||
|
|
if err != nil {
|
|||
|
|
return nil, err
|
|||
|
|
}
|
|||
|
|
c.SetDeadline(deadline)
|
|||
|
|
return c, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return transport
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// b 表示是否需要验证http证书
|
|||
|
|
func GetTLSTransport(transport *http.Transport, b bool) *http.Transport {
|
|||
|
|
transport.TLSClientConfig = &tls.Config{InsecureSkipVerify: b}
|
|||
|
|
|
|||
|
|
return transport
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 组装请求字符串
|
|||
|
|
// requestMap:请求数据集合
|
|||
|
|
func AssembleRequestParam(requestMap map[string]string) (dataStr string) {
|
|||
|
|
count := 0
|
|||
|
|
for k, v := range requestMap {
|
|||
|
|
if count == len(requestMap)-1 {
|
|||
|
|
dataStr += fmt.Sprintf("%s=%s", k, v)
|
|||
|
|
} else {
|
|||
|
|
dataStr += fmt.Sprintf("%s=%s&", k, v)
|
|||
|
|
}
|
|||
|
|
count += 1
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 按照参数名称升序组装请求字符串
|
|||
|
|
// requestMap:请求数据集合
|
|||
|
|
// asc:是否升序
|
|||
|
|
func AssembleRequestParamSort(requestMap map[string]string, asc bool) (dataStr string) {
|
|||
|
|
finalKeys := make([]string, 0, len(requestMap))
|
|||
|
|
|
|||
|
|
// 按key进行排序
|
|||
|
|
sortKeys := make([]string, 0, len(requestMap))
|
|||
|
|
for k, _ := range requestMap {
|
|||
|
|
sortKeys = append(sortKeys, k)
|
|||
|
|
}
|
|||
|
|
sort.Strings(sortKeys)
|
|||
|
|
|
|||
|
|
// 排序是升序还是降序
|
|||
|
|
if asc {
|
|||
|
|
finalKeys = sortKeys
|
|||
|
|
} else {
|
|||
|
|
for i := len(sortKeys) - 1; i >= 0; i-- {
|
|||
|
|
finalKeys = append(finalKeys, sortKeys[i])
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for index, key := range finalKeys {
|
|||
|
|
if index == len(finalKeys)-1 {
|
|||
|
|
dataStr += fmt.Sprintf("%s=%s", key, requestMap[key])
|
|||
|
|
} else {
|
|||
|
|
dataStr += fmt.Sprintf("%s=%s&", key, requestMap[key])
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return
|
|||
|
|
}
|