package util import ( "bytes" "crypto/md5" "encoding/hex" "encoding/json" "fmt" "io" "net/http" "net/url" "sort" "strings" "time" ) // GenerateSign 生成签名 func GenerateSign(ak, sk string, params map[string]string) string { // 1. 添加时间戳 params["timestamp"] = fmt.Sprintf("%d", time.Now().Unix()) // 2. 参数排序 keys := make([]string, 0, len(params)) for k := range params { keys = append(keys, k) } sort.Strings(keys) // 3. 拼接参数 var buffer strings.Builder for _, k := range keys { buffer.WriteString(k) buffer.WriteByte('=') buffer.WriteString(params[k]) buffer.WriteByte('&') } paramStr := buffer.String()[:len(buffer.String())-1] // 4. 计算MD5 signStr := paramStr + sk hash := md5.Sum([]byte(signStr)) return hex.EncodeToString(hash[:]) } func HttpGet(url string) (string, error) { // 创建一个HTTP客户端 client := &http.Client{} // 创建一个GET请求 req, err := http.NewRequest("GET", url, nil) if err != nil { return "", err } // 发送请求并获取响应 resp, err := client.Do(req) if err != nil { return "", err } defer func(Body io.ReadCloser) { err := Body.Close() if err != nil { } }(resp.Body) // 读取响应的内容 body, err := io.ReadAll(resp.Body) if err != nil { return "", err } return string(body), nil } func HttpPostJsonResponseString(url string, params map[string]string) (string, error) { jsonData, err := json.Marshal(params) if err != nil { return "", err } resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData)) if err != nil { return "", err } defer func(Body io.ReadCloser) { err := Body.Close() if err != nil { } }(resp.Body) body, err := io.ReadAll(resp.Body) if err != nil { return "", err } return string(body), nil } func HttpPostJsonWithHeaders(baseUrl string, headers map[string]string, params map[string]string) (string, error) { // 将参数转换为 JSON 字符串 jsonData, err := json.Marshal(params) if err != nil { fmt.Println("Error encoding JSON:", err) return "", err } // 创建请求 req, err := http.NewRequest("POST", baseUrl, bytes.NewBuffer(jsonData)) if err != nil { fmt.Println("Error creating request:", err) return "", err } // 设置请求头 for key, value := range headers { req.Header.Set(key, value) } // 发送请求 client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println("Error sending request:", err) return "", err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return "", err } return string(body), nil } func HttpGetStringAddHeadersResponseString(baseUrl string, headers map[string]string, params map[string]string) (string, error) { // 将参数编码到URL中 u, _ := url.Parse(baseUrl) q := u.Query() for key, value := range params { q.Add(key, value) } u.RawQuery = q.Encode() // 创建请求 req, err := http.NewRequest("GET", u.String(), nil) if err != nil { return "", err } // 设置请求头 for key, value := range headers { req.Header.Set(key, value) } // 发送请求 client := &http.Client{} resp, err := client.Do(req) if err != nil { return "", err } // 读取响应体 body, err := io.ReadAll(resp.Body) if err != nil { return "", err } err = resp.Body.Close() if err != nil { return "", err } result := string(body) //log.GlobalLogger.Info("发送http请求,请求路径=", baseUrl, ",请求头=", headers, "请求参数=", params, "请求结果=", result) return result, nil }