response.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package request
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "io/ioutil"
  7. "net/http"
  8. )
  9. type Response struct {
  10. time int64
  11. url string
  12. resp *http.Response
  13. body []byte
  14. }
  15. func (r *Response) Response() *http.Response {
  16. if r != nil {
  17. return r.resp
  18. }
  19. return nil
  20. }
  21. func (r *Response) StatusCode() int {
  22. if r.resp == nil {
  23. return 0
  24. }
  25. return r.resp.StatusCode
  26. }
  27. func (r *Response) Time() string {
  28. if r != nil {
  29. return fmt.Sprintf("%dms", r.time)
  30. }
  31. return "0ms"
  32. }
  33. func (r *Response) Url() string {
  34. if r != nil {
  35. return r.url
  36. }
  37. return ""
  38. }
  39. func (r *Response) Headers() http.Header {
  40. if r != nil {
  41. return r.resp.Header
  42. }
  43. return nil
  44. }
  45. func (r *Response) Cookies() []*http.Cookie {
  46. if r != nil {
  47. return r.resp.Cookies()
  48. }
  49. return []*http.Cookie{}
  50. }
  51. func (r *Response) Body() ([]byte, error) {
  52. if r == nil {
  53. return []byte{}, errors.New("gotool.HttpUtils.Response is nil.")
  54. }
  55. defer r.resp.Body.Close()
  56. if len(r.body) > 0 {
  57. return r.body, nil
  58. }
  59. if r.resp == nil || r.resp.Body == nil {
  60. return nil, errors.New("response or body is nil")
  61. }
  62. b, err := ioutil.ReadAll(r.resp.Body)
  63. if err != nil {
  64. return nil, err
  65. }
  66. r.body = b
  67. return b, nil
  68. }
  69. func (r *Response) Content() (string, error) {
  70. b, err := r.Body()
  71. if err != nil {
  72. return "", nil
  73. }
  74. return string(b), nil
  75. }
  76. func (r *Response) Json(v interface{}) error {
  77. return r.Unmarshal(v)
  78. }
  79. func (r *Response) Unmarshal(v interface{}) error {
  80. b, err := r.Body()
  81. if err != nil {
  82. return err
  83. }
  84. if err := json.Unmarshal(b, &v); err != nil {
  85. return err
  86. }
  87. return nil
  88. }
  89. func (r *Response) Close() error {
  90. if r != nil {
  91. return r.resp.Body.Close()
  92. }
  93. return nil
  94. }
  95. func (r *Response) Export() (string, error) {
  96. b, err := r.Body()
  97. if err != nil {
  98. return "", err
  99. }
  100. var i interface{}
  101. if err := json.Unmarshal(b, &i); err != nil {
  102. return "", errors.New("illegal json: " + err.Error())
  103. }
  104. return Export(i), nil
  105. }