gorequest.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. // http客户端接口
  2. // 秒寻科技
  3. // 2024-02-21
  4. // 周涛
  5. package util
  6. import (
  7. "bytes"
  8. "encoding/json"
  9. "errors"
  10. "io"
  11. "net/http"
  12. "net/url"
  13. "strings"
  14. "time"
  15. )
  16. // Get请求
  17. // strUrl:请求地址
  18. // headerMap:请求头参数
  19. // paramMap:参数
  20. // 返回值:字节数组
  21. func GetRequest(strUrl string, headerMap map[string]string, paramMap map[string]string) ([]byte, error) {
  22. //指定请求超时时间
  23. client := &http.Client{
  24. Timeout: 5 * time.Second, //5秒超时
  25. }
  26. //创建一个http请求
  27. request, err := http.NewRequest(http.MethodGet, strUrl, nil)
  28. if err != nil {
  29. return nil, err
  30. }
  31. //添加请求头
  32. request.Header.Add("User-Agent", "chrome")
  33. for key, v := range headerMap {
  34. request.Header.Add(key, v)
  35. }
  36. //为请求增加查询参数
  37. params := make(url.Values)
  38. for key, v := range paramMap {
  39. if v != "" {
  40. params.Add(key, v)
  41. }
  42. }
  43. request.URL.RawQuery = params.Encode()
  44. //发起请求
  45. resp, err := client.Do(request)
  46. if err != nil {
  47. return nil, err
  48. }
  49. defer func() {
  50. _ = resp.Body.Close()
  51. }()
  52. //检查状态码,判断请求是否成功
  53. if resp.StatusCode != 200 {
  54. return nil, errors.New("请求执行出错")
  55. }
  56. //读返回参数
  57. byteList, err := io.ReadAll(resp.Body)
  58. if err != nil {
  59. return nil, err
  60. }
  61. return byteList, nil
  62. }
  63. // Post请求-表单
  64. // strUrl:请求地址
  65. // dataMap:表单数据
  66. // 返回值:[]byte数据切片
  67. func PostRequestForm(strUrl string, dataMap map[string]string) ([]byte, error) {
  68. //指定请求超时时间
  69. client := &http.Client{
  70. Timeout: 5 * time.Second, //5秒超时
  71. }
  72. data := make(url.Values)
  73. for key, v := range dataMap {
  74. data.Add(key, v)
  75. }
  76. payload := data.Encode()
  77. //发请求
  78. bodyReader := strings.NewReader(payload)
  79. resp, err := client.Post(strUrl, "application/x-www-form-urlencoded", bodyReader)
  80. if err != nil {
  81. return nil, err
  82. }
  83. defer func() {
  84. _ = resp.Body.Close()
  85. }()
  86. //检查状态码,判断请求是否成功
  87. if resp.StatusCode != 200 {
  88. return nil, errors.New("请求执行出错")
  89. }
  90. //读取结果
  91. byteList, err := io.ReadAll(resp.Body)
  92. if err != nil {
  93. return nil, err
  94. }
  95. return byteList, nil
  96. }
  97. // Post请求-json
  98. // strUrl:请求地址
  99. // dataModel:结构体
  100. // 返回值:[]byte数据切片
  101. func PostRequestJson(strUrl string, dataModel interface{}) ([]byte, error) {
  102. //指定请求超时时间
  103. client := &http.Client{
  104. Timeout: 5 * time.Second, //5秒超时
  105. }
  106. dataList, err := json.Marshal(dataModel)
  107. if err != nil {
  108. return nil, err
  109. }
  110. bodyReader := bytes.NewReader(dataList)
  111. //发请求
  112. resp, err := client.Post(strUrl, "application/json", bodyReader)
  113. if err != nil {
  114. return nil, err
  115. }
  116. defer func() {
  117. _ = resp.Body.Close()
  118. }()
  119. //检查状态码,判断请求是否成功
  120. if resp.StatusCode != 200 {
  121. return nil, errors.New("请求执行出错")
  122. }
  123. //读取结果
  124. byteList, err := io.ReadAll(resp.Body)
  125. if err != nil {
  126. return nil, err
  127. }
  128. return byteList, nil
  129. }