transport.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package transport
  2. import (
  3. "crypto/tls"
  4. "github.com/0xJacky/Nginx-UI/settings"
  5. "net/http"
  6. "net/url"
  7. )
  8. // NewTransport creates a new http.Transport with the provided options.
  9. func NewTransport(options ...func(transport *http.Transport) error) (t *http.Transport, err error) {
  10. t = &http.Transport{
  11. Proxy: http.ProxyFromEnvironment,
  12. TLSClientConfig: &tls.Config{InsecureSkipVerify: settings.HTTPSettings.InsecureSkipVerify},
  13. }
  14. for _, option := range options {
  15. if err := option(t); err != nil {
  16. return nil, err
  17. }
  18. }
  19. return
  20. }
  21. // WithProxy returns a function that sets the proxy of the http.Transport to the provided proxy URL.
  22. func WithProxy(proxyUrl string) func(transport *http.Transport) error {
  23. if proxyUrl == "" {
  24. return func(transport *http.Transport) error {
  25. return nil
  26. }
  27. }
  28. proxy, err := url.Parse(proxyUrl)
  29. if err != nil {
  30. return func(transport *http.Transport) error {
  31. return err
  32. }
  33. }
  34. return func(transport *http.Transport) error {
  35. transport.Proxy = http.ProxyURL(proxy)
  36. return nil
  37. }
  38. }