fwhHttpClient.go 6.1 KB

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