|
|
- /*
- * url functions
- */
- package network
-
- import (
- "bytes"
- "crypto/md5"
- "encoding/hex"
- "encoding/json"
- "errors"
- "io/ioutil"
- "net"
- "net/http"
- "net/url"
- "strconv"
- "strings"
- "time"
-
- "git.tetele.net/tgo/crypter"
- )
-
- /**
- * post 请求
- */
- func FnPost(url, param string) ([]byte, error) {
- httpClient := &http.Client{}
-
- req, err := http.NewRequest("POST", url, strings.NewReader(param))
- if err != nil {
- return []byte(""), err
- }
-
- req.Header.Set("Content-Type", "application/x-www-form-urlencoded") //"application/x-www-form-urlencoded"
-
- resp, err := httpClient.Do(req)
- if err != nil {
- return []byte(""), err
- }
-
- defer resp.Body.Close()
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return []byte(""), err
- }
-
- return body, nil
- }
-
- /**
- * post 请求
- */
- func PostJson(url string, param []byte, header ...map[string]string) ([]byte, error) {
- httpClient := &http.Client{}
-
- req, err := http.NewRequest("POST", url, bytes.NewBuffer(param))
- if err != nil {
- return []byte(""), err
- }
-
- req.Header.Set("Content-Type", "application/json")
-
- if len(header) > 0 {
- for _, item := range header {
- for k, v := range item {
- req.Header[k] = []string{v}
- }
- }
- }
- resp, err := httpClient.Do(req)
- if err != nil {
- return []byte(""), err
- }
-
- defer resp.Body.Close()
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return []byte(""), err
- }
-
- return body, nil
- }
-
- /**
- * post 请求
- */
- func PostJsonData(url string, param interface{}, header ...map[string]string) ([]byte, error) {
- httpClient := &http.Client{}
- params, err := json.Marshal(param)
- if err != nil {
- return []byte(""), err
- }
- req, err := http.NewRequest("POST", url, bytes.NewBuffer(params))
- if err != nil {
- return []byte(""), err
- }
-
- req.Header.Set("Content-Type", "application/json")
-
- if len(header) > 0 {
- for _, item := range header {
- for k, v := range item {
- req.Header[k] = []string{v}
- }
- }
- }
- resp, err := httpClient.Do(req)
- if err != nil {
- return []byte(""), err
- }
-
- defer resp.Body.Close()
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return []byte(""), err
- }
-
- return body, nil
- }
-
- /**
- * 取本地IP
- */
- func GetLocalIp() string {
-
- addrs, err := net.InterfaceAddrs()
-
- if err != nil {
- return ""
- }
-
- for _, address := range addrs {
-
- // 检查ip地址判断是否回环地址
- if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
- if ipnet.IP.To4() != nil && !ipnet.IP.IsLinkLocalUnicast() {
- return ipnet.IP.String()
- }
- }
- }
-
- return ""
- }
-
- /**
- * 生成一个token
- */
- func CreateTokenWithTime(sToken string) string {
- now := time.Now()
- iNow := now.Format("20060102150405")
- sToken += iNow
- h := md5.New()
- h.Write([]byte(sToken)) // 需要加密的字符串
- cipher2Str := h.Sum(nil)
- return hex.EncodeToString(cipher2Str) // 输出加密结果
- }
-
- /**
- * 生成一个token
- */
- // func CreateToken(sToken string) string {
- // now := time.Now()
- // iNow := now.Format("20060102150405")
- // sToken += iNow
- // h := md5.New()
- // h.Write([]byte(sToken)) // 需要加密的字符串
- // cipher2Str := h.Sum(nil)
- // sMd5 := hex.EncodeToString(cipher2Str) // 输出加密结果
-
- // tokenEn := crypter.DesEn(sToken, "gzyc8642")
- // return sMd5 + "|" + ToString(now.Unix()) + "|" + tokenEn
- // }
-
- /**
- * 验证token
- */
- func CheckToken(token string) (bool, string) {
- arr := strings.Split(token, "|")
- if len(arr) != 3 {
- return false, ""
- }
- tokenDes := crypter.DesDe(arr[2], "gzyc8642")
-
- tokenTime := tokenDes[len(tokenDes)-14:]
-
- timeInt, err := strconv.ParseInt(arr[1], 10, 64)
- if err != nil {
- return false, ""
- }
- currentTime := time.Unix(timeInt, 0).Format("20060102150405")
-
- if currentTime != tokenTime {
- return false, ""
- }
-
- h := md5.New()
- h.Write([]byte(tokenDes)) // 需要加密的字符串
- cipher2Str := h.Sum(nil)
- sMd5 := hex.EncodeToString(cipher2Str) // 输出加密结果
-
- if sMd5 == arr[0] {
- return true, tokenDes[0 : len(tokenDes)-14]
- }
- return false, ""
- }
-
- /**
- * 给参数签名
- */
- func QuerySign(mQuery map[string]string) string {
- sParam := ""
- for k, v := range mQuery {
- sParam += k + "=" + v + "&"
- }
- query, Err := url.ParseQuery(sParam)
- if Err != nil {
- return ""
- } else {
- return crypter.Md5Password(query.Encode(), "guzeng1")
- }
- }
-
- /**
- * 从url中取域名,端口
- * 2019/05/20
- */
- func GetIpPortFromUrl(sUrl string) (string, string, error) {
- if sUrl == "" {
- return "", "", errors.New("param error")
- }
- if !strings.Contains(sUrl, "http://") && !strings.Contains(sUrl, "https://") {
- sUrl = "http://" + sUrl
- }
- u, err := url.Parse(sUrl)
- if err != nil {
- return "", "", err
- }
- return u.Hostname(), u.Port(), nil
- }
|