request.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package wechat
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "encoding/xml"
  6. "errors"
  7. "fmt"
  8. "git.chuangxin1.com/cx/myth"
  9. )
  10. func checkJSONError(msg myth.HTTPMessage) (jq *myth.JSONQuery, err error) {
  11. if msg.StatusCode != 200 {
  12. err = errors.New(`HTTP StatusCode not 200`)
  13. return
  14. }
  15. jq, err = msg.JSONQuery()
  16. if err != nil {
  17. return
  18. }
  19. var res ResponseMsg
  20. err = msg.JSON(&res)
  21. if err != nil {
  22. return
  23. }
  24. if res.ErrCode == ErrReqOk {
  25. return
  26. }
  27. err = errors.New(res.ErrMsg)
  28. /*
  29. code := int(0)
  30. code, err = jq.Int(`errcode`)
  31. if err != nil {
  32. return
  33. }
  34. if code == ErrReqOk {
  35. return
  36. }
  37. var m string
  38. m, err = jq.String("errmsg")
  39. if err != nil {
  40. return
  41. }
  42. err = errors.New(m)
  43. // */
  44. return
  45. }
  46. // getJSON 获取 JSON 格式返回数据
  47. func getJSON(uri string) (jq *myth.JSONQuery, err error) {
  48. var msg myth.HTTPMessage
  49. headers := make(map[string]string)
  50. headers["Accept-Encoding"] = "gzip, deflate, br"
  51. headers["Accept"] = "application/json"
  52. if msg, err = myth.Get(uri, "", "", headers); err != nil {
  53. return
  54. }
  55. jq, err = checkJSONError(msg)
  56. fmt.Println("getJSON", uri, err, string(msg.Body))
  57. return
  58. }
  59. // getBody 获取原始返回数据
  60. func getBody(uri string) (msg myth.HTTPMessage, err error) {
  61. headers := make(map[string]string)
  62. headers["Accept-Encoding"] = "gzip, deflate, br"
  63. msg, err = myth.Get(uri, "", "", headers)
  64. if err != nil {
  65. return
  66. }
  67. if msg.StatusCode == 200 {
  68. jq := &myth.JSONQuery{}
  69. jq, err = msg.JSONQuery()
  70. if err != nil {
  71. return
  72. }
  73. code := int(0)
  74. code, err = jq.Int(`errcode`)
  75. if code == ErrReqOk {
  76. err = nil
  77. return
  78. }
  79. if err == nil {
  80. var errmsg string
  81. errmsg, err = jq.String("errmsg")
  82. if err != nil {
  83. return
  84. }
  85. err = errors.New(errmsg)
  86. }
  87. } else {
  88. err = errors.New(`HTTP StatusCode not 200`)
  89. }
  90. return
  91. }
  92. func postJSON(url string, args interface{}) (msg myth.HTTPMessage, err error) {
  93. headers := make(map[string]string)
  94. headers["Accept-Encoding"] = "gzip, deflate, br"
  95. headers["Content-Type"] = "application/json; charset=utf-8"
  96. var data []byte
  97. data, err = json.Marshal(args)
  98. if err != nil {
  99. return
  100. }
  101. fmt.Println("postJSON", string(data))
  102. msg, err = myth.Post(url, "", "", headers, bytes.NewReader(data))
  103. return
  104. }
  105. func postJSONData(url string, data []byte) (msg myth.HTTPMessage, err error) {
  106. headers := make(map[string]string)
  107. headers["Accept-Encoding"] = "gzip, deflate, br"
  108. headers["Content-Type"] = "application/json; charset=utf-8"
  109. msg, err = myth.Post(url, "", "", headers, bytes.NewReader(data))
  110. return
  111. }
  112. func postXML(url string, args interface{}) (msg myth.HTTPMessage, err error) {
  113. headers := make(map[string]string)
  114. headers["Accept-Encoding"] = "gzip, deflate, br"
  115. headers["Content-Type"] = "application/xml; charset=utf-8"
  116. var data []byte
  117. data, err = xml.Marshal(args)
  118. if err != nil {
  119. return
  120. }
  121. msg, err = myth.Post(url, "", "", headers, bytes.NewReader(data))
  122. return
  123. }