proxy.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package tos
  2. import (
  3. "net/url"
  4. "strconv"
  5. )
  6. type Proxy struct {
  7. proxyHost string
  8. proxyUserName string
  9. proxyPassword string
  10. proxyPort int
  11. }
  12. func (p *Proxy) getRawUrl() string {
  13. return p.proxyHost + ":" + strconv.Itoa(p.proxyPort)
  14. }
  15. func (p *Proxy) Url() *url.URL {
  16. proxyURL, _ := url.Parse(p.getRawUrl())
  17. if p.proxyUserName != "" && p.proxyPassword != "" {
  18. proxyURL.User = url.UserPassword(p.proxyUserName, p.proxyPassword)
  19. } else if p.proxyUserName != "" {
  20. proxyURL.User = url.User(p.proxyUserName)
  21. }
  22. return proxyURL
  23. }
  24. func NewProxy(proxyHost string, proxyPort int) (*Proxy, error) {
  25. proxyUrl, err := url.Parse(proxyHost)
  26. if err != nil {
  27. return nil, ProxyUrlInvalid.withCause(err)
  28. }
  29. if proxyUrl.Scheme == "" {
  30. proxyHost = "http://" + proxyHost
  31. }
  32. if proxyUrl.Scheme == "https" {
  33. return nil, ProxyNotSupportHttps
  34. }
  35. if _, err := url.Parse(proxyHost + ":" + strconv.Itoa(proxyPort)); err != nil {
  36. if err != nil {
  37. return nil, err
  38. }
  39. }
  40. return &Proxy{
  41. proxyHost: proxyHost,
  42. proxyPort: proxyPort,
  43. }, nil
  44. }
  45. func (p *Proxy) WithAuth(username string, password string) {
  46. p.proxyUserName = username
  47. p.proxyPassword = password
  48. }