105 lines
2.4 KiB
Go
105 lines
2.4 KiB
Go
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
|
||
}
|