u_http.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package util
  2. import (
  3. "bytes"
  4. "crypto/md5"
  5. "encoding/hex"
  6. "encoding/json"
  7. "fmt"
  8. "io"
  9. "net/http"
  10. "net/url"
  11. "sort"
  12. "strings"
  13. "time"
  14. )
  15. // GenerateSign 生成签名
  16. func GenerateSign(ak, sk string, params map[string]string) string {
  17. // 1. 添加时间戳
  18. params["timestamp"] = fmt.Sprintf("%d", time.Now().Unix())
  19. // 2. 参数排序
  20. keys := make([]string, 0, len(params))
  21. for k := range params {
  22. keys = append(keys, k)
  23. }
  24. sort.Strings(keys)
  25. // 3. 拼接参数
  26. var buffer strings.Builder
  27. for _, k := range keys {
  28. buffer.WriteString(k)
  29. buffer.WriteByte('=')
  30. buffer.WriteString(params[k])
  31. buffer.WriteByte('&')
  32. }
  33. paramStr := buffer.String()[:len(buffer.String())-1]
  34. // 4. 计算MD5
  35. signStr := paramStr + sk
  36. hash := md5.Sum([]byte(signStr))
  37. return hex.EncodeToString(hash[:])
  38. }
  39. func HttpGet(url string) (string, error) {
  40. // 创建一个HTTP客户端
  41. client := &http.Client{}
  42. // 创建一个GET请求
  43. req, err := http.NewRequest("GET", url, nil)
  44. if err != nil {
  45. return "", err
  46. }
  47. // 发送请求并获取响应
  48. resp, err := client.Do(req)
  49. if err != nil {
  50. return "", err
  51. }
  52. defer func(Body io.ReadCloser) {
  53. err := Body.Close()
  54. if err != nil {
  55. }
  56. }(resp.Body)
  57. // 读取响应的内容
  58. body, err := io.ReadAll(resp.Body)
  59. if err != nil {
  60. return "", err
  61. }
  62. return string(body), nil
  63. }
  64. func HttpPostJsonResponseString(url string, params map[string]string) (string, error) {
  65. jsonData, err := json.Marshal(params)
  66. if err != nil {
  67. return "", err
  68. }
  69. resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData))
  70. if err != nil {
  71. return "", err
  72. }
  73. defer func(Body io.ReadCloser) {
  74. err := Body.Close()
  75. if err != nil {
  76. }
  77. }(resp.Body)
  78. body, err := io.ReadAll(resp.Body)
  79. if err != nil {
  80. return "", err
  81. }
  82. return string(body), nil
  83. }
  84. func HttpPostJsonWithHeaders(baseUrl string, headers map[string]string, params map[string]string) (string, error) {
  85. // 将参数转换为 JSON 字符串
  86. jsonData, err := json.Marshal(params)
  87. if err != nil {
  88. fmt.Println("Error encoding JSON:", err)
  89. return "", err
  90. }
  91. // 创建请求
  92. req, err := http.NewRequest("POST", baseUrl, bytes.NewBuffer(jsonData))
  93. if err != nil {
  94. fmt.Println("Error creating request:", err)
  95. return "", err
  96. }
  97. // 设置请求头
  98. for key, value := range headers {
  99. req.Header.Set(key, value)
  100. }
  101. // 发送请求
  102. client := &http.Client{}
  103. resp, err := client.Do(req)
  104. if err != nil {
  105. fmt.Println("Error sending request:", err)
  106. return "", err
  107. }
  108. defer resp.Body.Close()
  109. body, err := io.ReadAll(resp.Body)
  110. if err != nil {
  111. return "", err
  112. }
  113. return string(body), nil
  114. }
  115. func HttpGetStringAddHeadersResponseString(baseUrl string, headers map[string]string, params map[string]string) (string, error) {
  116. // 将参数编码到URL中
  117. u, _ := url.Parse(baseUrl)
  118. q := u.Query()
  119. for key, value := range params {
  120. q.Add(key, value)
  121. }
  122. u.RawQuery = q.Encode()
  123. // 创建请求
  124. req, err := http.NewRequest("GET", u.String(), nil)
  125. if err != nil {
  126. return "", err
  127. }
  128. // 设置请求头
  129. for key, value := range headers {
  130. req.Header.Set(key, value)
  131. }
  132. // 发送请求
  133. client := &http.Client{}
  134. resp, err := client.Do(req)
  135. if err != nil {
  136. return "", err
  137. }
  138. // 读取响应体
  139. body, err := io.ReadAll(resp.Body)
  140. if err != nil {
  141. return "", err
  142. }
  143. err = resp.Body.Close()
  144. if err != nil {
  145. return "", err
  146. }
  147. result := string(body)
  148. //log.GlobalLogger.Info("发送http请求,请求路径=", baseUrl, ",请求头=", headers, "请求参数=", params, "请求结果=", result)
  149. return result, nil
  150. }