request.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package http
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io"
  7. "net/http"
  8. "net/url"
  9. "strings"
  10. )
  11. type RequestData struct {
  12. Url *url.URL
  13. Data url.Values
  14. DataByte []byte
  15. Header map[string]string
  16. }
  17. func (r *RequestData) SetHeader(key string, value string) {
  18. if r.Header == nil {
  19. r.Header = make(map[string]string)
  20. }
  21. r.Header[key] = value
  22. }
  23. func (r *RequestData) SetData(key string, value string) {
  24. if r.Data == nil {
  25. r.Data = url.Values{}
  26. }
  27. r.Data.Set(key, value)
  28. }
  29. func (r *RequestData) ConstructRequest(_URL string) error {
  30. _url, err := url.Parse(_URL)
  31. if err != nil {
  32. return err
  33. }
  34. r.Url = _url
  35. return nil
  36. }
  37. // get请求
  38. func (r *RequestData) GetRequest() ([]byte, error) {
  39. if r.Data != nil {
  40. r.Url.RawQuery = r.Data.Encode()
  41. }
  42. req, err := http.NewRequest("GET", r.Url.String(), nil)
  43. if err != nil {
  44. fmt.Println(err)
  45. return nil, err
  46. }
  47. // 设置请求头信息,指定内容类型和长度
  48. req.Header.Set("Content-Type", "application/json")
  49. if r.Header != nil {
  50. for k, v := range r.Header {
  51. req.Header.Set(k, v)
  52. }
  53. }
  54. // 执行请求
  55. client := &http.Client{}
  56. resp, err := client.Do(req)
  57. fmt.Println(r.Url.String())
  58. if err != nil {
  59. // fmt.Println("请求失败:", err)
  60. return nil, err
  61. }
  62. defer func(Body io.ReadCloser) {
  63. err := Body.Close()
  64. if err != nil {
  65. }
  66. }(resp.Body)
  67. // 读取响应内容
  68. body, err := io.ReadAll(resp.Body)
  69. if err != nil {
  70. fmt.Println("读取响应失败:", err)
  71. return nil, err
  72. }
  73. //fmt.Println("响应内容:", string(body))
  74. //var person interface{}
  75. //err = json.Unmarshal(body, &person)
  76. //if err != nil {
  77. // log.Fatalf("JSON Unmarshal error: %v", err)
  78. //}
  79. // 输出响应内容
  80. return body, nil
  81. }
  82. // post请求
  83. func (r *RequestData) PostJsonRequest() ([]byte, error) {
  84. if r.DataByte == nil {
  85. postBody, _ := json.Marshal(r.Data)
  86. r.DataByte = postBody
  87. }
  88. // 将数据转换为字节序列
  89. requestBody := bytes.NewBuffer(r.DataByte)
  90. // 创建请求
  91. req, err := http.NewRequest("POST", r.Url.String(), requestBody)
  92. if err != nil {
  93. fmt.Println(err)
  94. return nil, err
  95. }
  96. // 设置请求头信息,指定内容类型和长度
  97. req.Header.Set("Content-Type", "application/json")
  98. req.Header.Set("Content-Length", fmt.Sprintf("%d", requestBody.Len()))
  99. if r.Header != nil {
  100. for k, v := range r.Header {
  101. req.Header.Set(k, v)
  102. }
  103. }
  104. // 执行请求
  105. client := &http.Client{}
  106. resp, err := client.Do(req)
  107. if err != nil {
  108. fmt.Println(err)
  109. return nil, err
  110. }
  111. defer func(Body io.ReadCloser) {
  112. err := Body.Close()
  113. if err != nil {
  114. }
  115. }(resp.Body)
  116. // 读取响应体
  117. body, err := io.ReadAll(resp.Body)
  118. if err != nil {
  119. fmt.Println(err)
  120. return nil, err
  121. }
  122. return body, nil
  123. }
  124. func (r *RequestData) PostUrlencodedRequest() ([]byte, error) {
  125. //payload := io.Reader{}
  126. //payload := strings.Reader{}
  127. var payload io.Reader
  128. if r.DataByte == nil {
  129. dataString := r.Data.Encode()
  130. payload = strings.NewReader(dataString)
  131. } else {
  132. payload = bytes.NewBuffer(r.DataByte)
  133. }
  134. // 创建请求
  135. req, err := http.NewRequest("POST", r.Url.String(), payload)
  136. if err != nil {
  137. fmt.Println(err)
  138. return nil, err
  139. }
  140. // 设置请求头信息,指定内容类型和长度
  141. req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
  142. if r.Header != nil {
  143. for k, v := range r.Header {
  144. req.Header.Set(k, v)
  145. }
  146. }
  147. // 执行请求
  148. client := &http.Client{}
  149. resp, err := client.Do(req)
  150. if err != nil {
  151. fmt.Println(err)
  152. return nil, err
  153. }
  154. defer func(Body io.ReadCloser) {
  155. err := Body.Close()
  156. if err != nil {
  157. }
  158. }(resp.Body)
  159. // 读取响应体
  160. body, err := io.ReadAll(resp.Body)
  161. if err != nil {
  162. fmt.Println(err)
  163. return nil, err
  164. }
  165. return body, nil
  166. }