fwhHttpClient.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package fwh_pro
  2. import (
  3. "encoding/json"
  4. "fwh-toolbox-server/domain"
  5. "fwh-toolbox-server/utils/httpClient"
  6. "net/http"
  7. "net/url"
  8. "time"
  9. )
  10. const (
  11. timeout time.Duration = 3 * time.Minute // fwh请求超时3min
  12. )
  13. // FwhHttpInit
  14. func FwhHttpInit() {
  15. httpClient.RegisterLogin(reLogin)
  16. }
  17. // 仅用户登录或者不需要token的请求
  18. func FwhHttpGetWithoutToken(url string, params url.Values) (*httpClient.Response, error) {
  19. t := timeout
  20. opt := httpClient.HttpClientOptions{
  21. Timeout: &t,
  22. Header: &http.Header{
  23. "Accept": {"application/json", "text/plain", "*/*"},
  24. },
  25. }
  26. return httpClient.HttpGet(url, params, &opt)
  27. }
  28. func FwhHttpGet(url string, params url.Values) (*httpClient.Response, error) {
  29. t := timeout
  30. opt := httpClient.HttpClientOptions{
  31. Timeout: &t,
  32. Header: &http.Header{
  33. "Logintoken": {getLoginToken()},
  34. "Accept": {"application/json", "text/plain", "*/*"},
  35. },
  36. }
  37. return httpClient.HttpGet(url, params, &opt)
  38. }
  39. // 仅用户登录或者不需要token的请求
  40. func FwhHttpPostWithoutToken(url string, body any) (*httpClient.Response, error) {
  41. t := timeout
  42. opt := httpClient.HttpClientOptions{
  43. Timeout: &t,
  44. Header: &http.Header{
  45. "Accept": {"application/json", "text/plain", "*/*"},
  46. },
  47. }
  48. return httpClient.HttpPost(url, body, &opt)
  49. }
  50. func FwhHttpPost(url string, body any) (*httpClient.Response, error) {
  51. t := timeout
  52. opt := httpClient.HttpClientOptions{
  53. Timeout: &t,
  54. Header: &http.Header{
  55. "Logintoken": {getLoginToken()},
  56. "Accept": {"application/json", "text/plain", "*/*"},
  57. },
  58. }
  59. return httpClient.HttpPost(url, body, &opt)
  60. }
  61. /************ 实现标准结构体解析 ************/
  62. func FwhHttpGetUnmarshal[T any](url string, params url.Values) (*domain.FwhResponse[T], error) {
  63. res, err := FwhHttpGet(url, params)
  64. if err != nil {
  65. return nil, err
  66. }
  67. var data domain.FwhResponse[T]
  68. // 反序列化(unmarshal)
  69. jsonErr := json.Unmarshal(res.Body, &data)
  70. if jsonErr != nil {
  71. return nil, jsonErr
  72. }
  73. if data.Code == 401 {
  74. // invalid token
  75. reLogin() // 重新登录
  76. // 重新请求
  77. res, err := FwhHttpGet(url, params)
  78. if err != nil {
  79. return nil, err
  80. }
  81. // 反序列化(unmarshal)
  82. jsonErr := json.Unmarshal(res.Body, &data)
  83. if jsonErr != nil {
  84. return nil, jsonErr
  85. }
  86. }
  87. return &data, nil
  88. }
  89. func FwhHttpGetUnmarshalPage[T any](url string, params url.Values) (*domain.FwhPageResponse[T], error) {
  90. res, err := FwhHttpGet(url, params)
  91. if err != nil {
  92. return nil, err
  93. }
  94. var data domain.FwhPageResponse[T]
  95. // 反序列化(unmarshal)
  96. jsonErr := json.Unmarshal(res.Body, &data)
  97. if jsonErr != nil {
  98. return nil, jsonErr
  99. }
  100. if data.Code == 401 {
  101. // invalid token
  102. reLogin() // 重新登录
  103. // 重新请求
  104. res, err := FwhHttpGet(url, params)
  105. if err != nil {
  106. return nil, err
  107. }
  108. // 反序列化(unmarshal)
  109. jsonErr := json.Unmarshal(res.Body, &data)
  110. if jsonErr != nil {
  111. return nil, jsonErr
  112. }
  113. }
  114. return &data, nil
  115. }
  116. func FwhHttpGetUnmarshalA[T any](url string, params url.Values) (*domain.FwhResponseA[T], error) {
  117. res, err := FwhHttpGet(url, params)
  118. if err != nil {
  119. return nil, err
  120. }
  121. var data domain.FwhResponseA[T]
  122. // 反序列化(unmarshal)
  123. jsonErr := json.Unmarshal(res.Body, &data)
  124. if jsonErr != nil {
  125. return nil, jsonErr
  126. }
  127. if data.Code == 401 {
  128. // invalid token
  129. reLogin() // 重新登录
  130. // 重新请求
  131. res, err := FwhHttpGet(url, params)
  132. if err != nil {
  133. return nil, err
  134. }
  135. // 反序列化(unmarshal)
  136. jsonErr := json.Unmarshal(res.Body, &data)
  137. if jsonErr != nil {
  138. return nil, jsonErr
  139. }
  140. }
  141. return &data, nil
  142. }
  143. func FwhHttpGetUnmarshalB[T any](url string, params url.Values) (*domain.FwhResponseB[T], error) {
  144. res, err := FwhHttpGet(url, params)
  145. if err != nil {
  146. return nil, err
  147. }
  148. var data domain.FwhResponseB[T]
  149. // 反序列化(unmarshal)
  150. jsonErr := json.Unmarshal(res.Body, &data)
  151. if jsonErr != nil {
  152. return nil, jsonErr
  153. }
  154. if data.Code == 401 {
  155. // invalid token
  156. reLogin() // 重新登录
  157. // 重新请求
  158. res, err := FwhHttpGet(url, params)
  159. if err != nil {
  160. return nil, err
  161. }
  162. // 反序列化(unmarshal)
  163. jsonErr := json.Unmarshal(res.Body, &data)
  164. if jsonErr != nil {
  165. return nil, jsonErr
  166. }
  167. }
  168. return &data, nil
  169. }
  170. func FwhHttpPostUnmarshal[T any](url string, body any) (*domain.FwhResponse[T], error) {
  171. res, err := FwhHttpPost(url, body)
  172. if err != nil {
  173. return nil, err
  174. }
  175. var data domain.FwhResponse[T]
  176. // 反序列化(unmarshal)
  177. jsonErr := json.Unmarshal(res.Body, &data)
  178. if jsonErr != nil {
  179. return nil, jsonErr
  180. }
  181. if data.Code == 401 {
  182. // invalid token
  183. reLogin() // 重新登录
  184. // 重新请求
  185. res, err := FwhHttpPost(url, body)
  186. if err != nil {
  187. return nil, err
  188. }
  189. // 反序列化(unmarshal)
  190. jsonErr := json.Unmarshal(res.Body, &data)
  191. if jsonErr != nil {
  192. return nil, jsonErr
  193. }
  194. }
  195. return &data, nil
  196. }
  197. func FwhHttpPostUnmarshalPage[T any](url string, body any) (*domain.FwhPageResponse[T], error) {
  198. res, err := FwhHttpPost(url, body)
  199. if err != nil {
  200. return nil, err
  201. }
  202. var data domain.FwhPageResponse[T]
  203. // 反序列化(unmarshal)
  204. jsonErr := json.Unmarshal(res.Body, &data)
  205. if jsonErr != nil {
  206. return nil, jsonErr
  207. }
  208. if data.Code == 401 {
  209. // invalid token
  210. reLogin() // 重新登录
  211. // 重新请求
  212. res, err := FwhHttpPost(url, body)
  213. if err != nil {
  214. return nil, err
  215. }
  216. // 反序列化(unmarshal)
  217. jsonErr := json.Unmarshal(res.Body, &data)
  218. if jsonErr != nil {
  219. return nil, jsonErr
  220. }
  221. }
  222. return &data, nil
  223. }