goProject/.svn/pristine/8f/8f7ba704a07d51f484a829817f9fb230eebd4d2f.svn-base

105 lines
2.4 KiB
Plaintext
Raw Normal View History

2025-01-06 16:21:36 +08:00
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
}