fwhHttpClient.go 6.2 KB

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