request.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package wechat
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "encoding/xml"
  6. "errors"
  7. "git.chuangxin1.com/cx/myth"
  8. )
  9. func checkJSONError(msg myth.HTTPMessage) (jq *myth.JSONQuery, err error) {
  10. if msg.StatusCode == 200 {
  11. jq, err = msg.JSONQuery()
  12. if err != nil {
  13. return
  14. }
  15. var code int
  16. code, err = jq.Int(`errcode`)
  17. if err == nil {
  18. if code == ErrReqOk {
  19. return
  20. }
  21. var msg string
  22. msg, err = jq.String("errmsg")
  23. if err != nil {
  24. return
  25. }
  26. err = errors.New(msg)
  27. }
  28. } else {
  29. err = errors.New(`HTTP StatusCode not 200`)
  30. }
  31. return
  32. }
  33. // getJSON 获取 JSON 格式返回数据
  34. func getJSON(uri string) (jq *myth.JSONQuery, err error) {
  35. var msg myth.HTTPMessage
  36. headers := make(map[string]string)
  37. headers["Accept-Encoding"] = "gzip, deflate, br"
  38. headers["Accept"] = "application/json"
  39. if msg, err = myth.Get(uri, "", "", headers); err != nil {
  40. return
  41. }
  42. jq, err = checkJSONError(msg)
  43. return
  44. }
  45. // getBody 获取原始返回数据
  46. func getBody(uri string) (msg myth.HTTPMessage, err error) {
  47. headers := make(map[string]string)
  48. headers["Accept-Encoding"] = "gzip, deflate, br"
  49. msg, err = myth.Get(uri, "", "", headers)
  50. return
  51. }
  52. func postJSON(url string, args interface{}) (msg myth.HTTPMessage, err error) {
  53. headers := make(map[string]string)
  54. headers["Accept-Encoding"] = "gzip, deflate, br"
  55. headers["Content-Type"] = "application/json; charset=utf-8"
  56. var data []byte
  57. data, err = json.Marshal(args)
  58. if err != nil {
  59. return
  60. }
  61. msg, err = myth.Post(url, "", "", headers, bytes.NewReader(data))
  62. return
  63. }
  64. func postXML(url string, args interface{}) (msg myth.HTTPMessage, err error) {
  65. headers := make(map[string]string)
  66. headers["Accept-Encoding"] = "gzip, deflate, br"
  67. headers["Content-Type"] = "application/xml; charset=utf-8"
  68. var data []byte
  69. data, err = xml.Marshal(args)
  70. if err != nil {
  71. return
  72. }
  73. msg, err = myth.Post(url, "", "", headers, bytes.NewReader(data))
  74. return
  75. }