util.go 750 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package httpx
  2. import "net/http"
  3. const xForwardedFor = "X-Forwarded-For"
  4. // GetFormValues returns the form values.
  5. func GetFormValues(r *http.Request) (map[string]any, error) {
  6. if err := r.ParseForm(); err != nil {
  7. return nil, err
  8. }
  9. if err := r.ParseMultipartForm(maxMemory); err != nil {
  10. if err != http.ErrNotMultipart {
  11. return nil, err
  12. }
  13. }
  14. params := make(map[string]any, len(r.Form))
  15. for name := range r.Form {
  16. formValue := r.Form.Get(name)
  17. if len(formValue) > 0 {
  18. params[name] = formValue
  19. }
  20. }
  21. return params, nil
  22. }
  23. // GetRemoteAddr returns the peer address, supports X-Forward-For.
  24. func GetRemoteAddr(r *http.Request) string {
  25. v := r.Header.Get(xForwardedFor)
  26. if len(v) > 0 {
  27. return v
  28. }
  29. return r.RemoteAddr
  30. }