SussBi.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package outServer
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/v2/net/ghttp"
  5. "golang.org/x/net/publicsuffix"
  6. "net/http"
  7. "net/http/cookiejar"
  8. "net/url"
  9. )
  10. type sussBi struct {
  11. addr string
  12. user string
  13. pwd string
  14. Url *url.URL
  15. jar *cookiejar.Jar
  16. }
  17. func InitSussBi(address, user, password string) *sussBi {
  18. sussCookie, _ := cookiejar.New(&cookiejar.Options{
  19. PublicSuffixList: publicsuffix.List,
  20. })
  21. u, _ := url.Parse(address)
  22. return &sussBi{
  23. addr: address,
  24. user: user,
  25. Url: u,
  26. pwd: password,
  27. jar: sussCookie,
  28. }
  29. }
  30. // AutoLogin 自动登录
  31. func (s *sussBi) AutoLogin() error {
  32. client := &http.Client{
  33. Jar: s.jar,
  34. }
  35. resp, err := client.Get(fmt.Sprintf("%s/?:user=%s&:password=%s", s.addr, s.user, s.pwd))
  36. if err != nil {
  37. return err
  38. }
  39. if !(resp.StatusCode == 302 || resp.StatusCode == 200) {
  40. return fmt.Errorf("自动登录异常")
  41. }
  42. return nil
  43. }
  44. // RequestLogin 装配登录状态
  45. func (s *sussBi) RequestLogin(r *ghttp.Request) error {
  46. if cookies := s.jar.Cookies(s.Url); len(cookies) > 0 {
  47. r.Request.AddCookie(cookies[0])
  48. }
  49. return nil
  50. }
  51. // CheckLoginOut 检测登录状态是否过期
  52. func (s *sussBi) CheckLoginOut(r *ghttp.Request) bool {
  53. if r.Response.Status == 401 {
  54. return true
  55. }
  56. return false
  57. }