fwhHttpClient.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. package fwh_pro
  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. }
  38. // 仅用户登录或者不需要token的请求
  39. func FwhHttpGetWithoutToken(url string, params url.Values) (*httpClient.Response, error) {
  40. t := timeout
  41. opt := httpClient.HttpClientOptions{
  42. Timeout: &t,
  43. Header: &http.Header{
  44. "Accept": {"application/json", "text/plain", "*/*"},
  45. },
  46. }
  47. return fwhHttpClient.HttpGet(url, &params, &opt)
  48. }
  49. func FwhHttpGet(url string, params url.Values) (*httpClient.Response, error) {
  50. t := timeout
  51. opt := httpClient.HttpClientOptions{
  52. Timeout: &t,
  53. Header: &http.Header{
  54. "Logintoken": {getLoginToken()},
  55. "Accept": {"application/json", "text/plain", "*/*"},
  56. },
  57. }
  58. return fwhHttpClient.HttpGet(url, &params, &opt)
  59. }
  60. // 仅用户登录或者不需要token的请求
  61. func FwhHttpPostWithoutToken(url string, body any) (*httpClient.Response, error) {
  62. t := timeout
  63. opt := httpClient.HttpClientOptions{
  64. Timeout: &t,
  65. Header: &http.Header{
  66. "Accept": {"application/json", "text/plain", "*/*"},
  67. },
  68. }
  69. return fwhHttpClient.HttpPost(url, body, &opt)
  70. }
  71. func FwhHttpPost(url string, body any) (*httpClient.Response, error) {
  72. t := timeout
  73. opt := httpClient.HttpClientOptions{
  74. Timeout: &t,
  75. Header: &http.Header{
  76. "Logintoken": {getLoginToken()},
  77. "Accept": {"application/json", "text/plain", "*/*"},
  78. },
  79. }
  80. return fwhHttpClient.HttpPost(url, body, &opt)
  81. }
  82. /************ 实现标准结构体解析 ************/
  83. func FwhHttpGetUnmarshal[T any](url string, params url.Values) (*domain.FwhResponse[T], error) {
  84. res, err := FwhHttpGet(url, params)
  85. if err != nil {
  86. return nil, err
  87. }
  88. var data domain.FwhResponse[T]
  89. // 反序列化(unmarshal)
  90. jsonErr := json.Unmarshal(res.Body, &data)
  91. if jsonErr != nil {
  92. return nil, jsonErr
  93. }
  94. if data.Code == 401 {
  95. // invalid token
  96. reLogin() // 重新登录
  97. // 重新请求
  98. res, err := FwhHttpGet(url, params)
  99. if err != nil {
  100. return nil, err
  101. }
  102. // 反序列化(unmarshal)
  103. jsonErr := json.Unmarshal(res.Body, &data)
  104. if jsonErr != nil {
  105. return nil, jsonErr
  106. }
  107. }
  108. return &data, nil
  109. }
  110. func FwhHttpGetUnmarshalPage[T any](url string, params url.Values) (*domain.FwhPageResponse[T], error) {
  111. res, err := FwhHttpGet(url, params)
  112. if err != nil {
  113. return nil, err
  114. }
  115. var data domain.FwhPageResponse[T]
  116. // 反序列化(unmarshal)
  117. jsonErr := json.Unmarshal(res.Body, &data)
  118. if jsonErr != nil {
  119. return nil, jsonErr
  120. }
  121. if data.Code == 401 {
  122. // invalid token
  123. reLogin() // 重新登录
  124. // 重新请求
  125. res, err := FwhHttpGet(url, params)
  126. if err != nil {
  127. return nil, err
  128. }
  129. // 反序列化(unmarshal)
  130. jsonErr := json.Unmarshal(res.Body, &data)
  131. if jsonErr != nil {
  132. return nil, jsonErr
  133. }
  134. }
  135. return &data, nil
  136. }
  137. func FwhHttpGetUnmarshalA[T any](url string, params url.Values) (*domain.FwhResponseA[T], error) {
  138. res, err := FwhHttpGet(url, params)
  139. if err != nil {
  140. return nil, err
  141. }
  142. var data domain.FwhResponseA[T]
  143. // 反序列化(unmarshal)
  144. jsonErr := json.Unmarshal(res.Body, &data)
  145. if jsonErr != nil {
  146. return nil, jsonErr
  147. }
  148. if data.Code == 401 {
  149. // invalid token
  150. reLogin() // 重新登录
  151. // 重新请求
  152. res, err := FwhHttpGet(url, params)
  153. if err != nil {
  154. return nil, err
  155. }
  156. // 反序列化(unmarshal)
  157. jsonErr := json.Unmarshal(res.Body, &data)
  158. if jsonErr != nil {
  159. return nil, jsonErr
  160. }
  161. }
  162. return &data, nil
  163. }
  164. func FwhHttpGetUnmarshalB[T any](url string, params url.Values) (*domain.FwhResponseB[T], error) {
  165. res, err := FwhHttpGet(url, params)
  166. if err != nil {
  167. return nil, err
  168. }
  169. var data domain.FwhResponseB[T]
  170. // 反序列化(unmarshal)
  171. jsonErr := json.Unmarshal(res.Body, &data)
  172. if jsonErr != nil {
  173. return nil, jsonErr
  174. }
  175. if data.Code == 401 {
  176. // invalid token
  177. reLogin() // 重新登录
  178. // 重新请求
  179. res, err := FwhHttpGet(url, params)
  180. if err != nil {
  181. return nil, err
  182. }
  183. // 反序列化(unmarshal)
  184. jsonErr := json.Unmarshal(res.Body, &data)
  185. if jsonErr != nil {
  186. return nil, jsonErr
  187. }
  188. }
  189. return &data, nil
  190. }
  191. func FwhHttpPostUnmarshal[T any](url string, body any) (*domain.FwhResponse[T], error) {
  192. res, err := FwhHttpPost(url, body)
  193. if err != nil {
  194. return nil, err
  195. }
  196. var data domain.FwhResponse[T]
  197. // 反序列化(unmarshal)
  198. jsonErr := json.Unmarshal(res.Body, &data)
  199. if jsonErr != nil {
  200. return nil, jsonErr
  201. }
  202. if data.Code == 401 {
  203. // invalid token
  204. reLogin() // 重新登录
  205. // 重新请求
  206. res, err := FwhHttpPost(url, body)
  207. if err != nil {
  208. return nil, err
  209. }
  210. // 反序列化(unmarshal)
  211. jsonErr := json.Unmarshal(res.Body, &data)
  212. if jsonErr != nil {
  213. return nil, jsonErr
  214. }
  215. }
  216. return &data, nil
  217. }
  218. func FwhHttpPostUnmarshalPage[T any](url string, body any) (*domain.FwhPageResponse[T], error) {
  219. res, err := FwhHttpPost(url, body)
  220. if err != nil {
  221. return nil, err
  222. }
  223. var data domain.FwhPageResponse[T]
  224. // 反序列化(unmarshal)
  225. jsonErr := json.Unmarshal(res.Body, &data)
  226. if jsonErr != nil {
  227. return nil, jsonErr
  228. }
  229. if data.Code == 401 {
  230. // invalid token
  231. reLogin() // 重新登录
  232. // 重新请求
  233. res, err := FwhHttpPost(url, body)
  234. if err != nil {
  235. return nil, err
  236. }
  237. // 反序列化(unmarshal)
  238. jsonErr := json.Unmarshal(res.Body, &data)
  239. if jsonErr != nil {
  240. return nil, jsonErr
  241. }
  242. }
  243. return &data, nil
  244. }