request.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package readonlyrequest
  2. import (
  3. "github.com/SongZihuan/huan-proxy/src/utils"
  4. "net/http"
  5. "net/url"
  6. )
  7. type ReadOnlyRequest struct {
  8. req *http.Request
  9. url *url.URL
  10. header http.Header
  11. }
  12. func NewReadOnlyRequest(req *http.Request) *ReadOnlyRequest {
  13. return &ReadOnlyRequest{
  14. req: req,
  15. url: utils.URLClone(req.URL),
  16. header: req.Header.Clone(),
  17. }
  18. }
  19. func (r *ReadOnlyRequest) Host() string {
  20. return r.req.Host
  21. }
  22. func (r *ReadOnlyRequest) Method() string {
  23. return r.req.Method
  24. }
  25. func (r *ReadOnlyRequest) RemoteAddr() string {
  26. return r.req.Host
  27. }
  28. func (r *ReadOnlyRequest) Proto() string {
  29. return r.req.Proto
  30. }
  31. func (r *ReadOnlyRequest) MustProto() string {
  32. proto := r.req.Proto
  33. if proto == "" {
  34. if r.IsTLS() {
  35. return "https"
  36. } else {
  37. return "http"
  38. }
  39. } else {
  40. return proto
  41. }
  42. }
  43. func (r *ReadOnlyRequest) URL() *url.URL {
  44. return utils.URLClone(r.req.URL)
  45. }
  46. func (r *ReadOnlyRequest) Header() http.Header {
  47. return r.req.Header.Clone()
  48. }
  49. func (r *ReadOnlyRequest) IsTLS() bool {
  50. return r.req.TLS != nil
  51. }