new client
All checks were successful
/ Make image (push) Successful in 38s

This commit is contained in:
nquidox 2025-12-20 16:06:05 +03:00
parent 4ec69fcc08
commit ae4dd4bf63

View file

@ -1,7 +1,10 @@
package parsers package parsers
import ( import (
"context"
"fmt" "fmt"
"github.com/chromedp/cdproto/network"
"github.com/chromedp/chromedp"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"golang.org/x/net/html" "golang.org/x/net/html"
"net/http" "net/http"
@ -68,7 +71,7 @@ func NewMandarakeParser(goroutinesNumber int) *MandarakeParser {
func (s *MandarakeParser) HandleTasks(tasks []shared.Task, sender chan shared.TaskResult, state *appState.State) { func (s *MandarakeParser) HandleTasks(tasks []shared.Task, sender chan shared.TaskResult, state *appState.State) {
log.Debug("Handling Mandarake tasks") log.Debug("Handling Mandarake tasks")
if err := s.initClient(); err != nil { if err := s.initClient2(); err != nil {
log.WithError(err).Error("Mandarake handler | Error initializing client") log.WithError(err).Error("Mandarake handler | Error initializing client")
return return
} }
@ -116,6 +119,7 @@ func (s *MandarakeParser) worker(receiver chan shared.Task, sender chan shared.T
} }
} }
// Deprecated: use initClient2 instead.
func (s *MandarakeParser) initClient() error { func (s *MandarakeParser) initClient() error {
//preload cookies for client //preload cookies for client
req, err := http.NewRequest("GET", s.parseParams.cookieUrl, nil) req, err := http.NewRequest("GET", s.parseParams.cookieUrl, nil)
@ -123,6 +127,7 @@ func (s *MandarakeParser) initClient() error {
return err return err
} }
//TODO сделать один клиент с одним джаром
client := http.Client{} client := http.Client{}
req.Header.Set("User-Agent", s.parseParams.userAgent) req.Header.Set("User-Agent", s.parseParams.userAgent)
@ -130,6 +135,7 @@ func (s *MandarakeParser) initClient() error {
if err != nil { if err != nil {
return err return err
} }
defer result.Body.Close()
c := result.Cookies() c := result.Cookies()
log.WithField("cookies", c).Debug("Mandarake handler | Get cookies") log.WithField("cookies", c).Debug("Mandarake handler | Get cookies")
@ -288,3 +294,82 @@ func (s *MandarakeParser) getPrice(rawStr []string) int {
} }
return 0 return 0
} }
//new client
func (s *MandarakeParser) initClient2() error {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
ctx, _ = chromedp.NewContext(ctx)
if err := chromedp.Run(ctx,
chromedp.Navigate(s.parseParams.cookieUrl),
chromedp.WaitVisible("body", chromedp.ByQuery),
); err != nil {
return fmt.Errorf("failed to navigate: %w", err)
}
var cookies []*network.Cookie
err := chromedp.Run(ctx, chromedp.ActionFunc(func(ctx context.Context) error {
var err error
cookies, err = network.GetCookies().Do(ctx)
return err
}))
if err != nil {
return fmt.Errorf("failed to get cookies: %w", err)
}
var httpCookies []*http.Cookie
for _, c := range cookies {
httpCookies = append(httpCookies, &http.Cookie{
Name: c.Name,
Value: c.Value,
Path: c.Path,
Domain: c.Domain,
Expires: float64ToTime(c.Expires),
Secure: c.Secure,
HttpOnly: c.HTTPOnly,
SameSite: convertSameSite(c.SameSite),
})
}
jar, err := cookiejar.New(nil)
if err != nil {
return err
}
u, err := url.Parse(s.parseParams.cookieUrl)
if err != nil {
return err
}
jar.SetCookies(u, httpCookies)
client := &http.Client{
Jar: jar,
Timeout: 30 * time.Second,
}
s.client = client
return nil
}
func convertSameSite(s network.CookieSameSite) http.SameSite {
switch s {
case network.CookieSameSiteStrict:
return http.SameSiteStrictMode
case network.CookieSameSiteLax:
return http.SameSiteLaxMode
case network.CookieSameSiteNone:
return http.SameSiteNoneMode
default:
return http.SameSiteDefaultMode
}
}
func float64ToTime(unixFloat float64) time.Time {
sec := int64(unixFloat)
nsec := int64((unixFloat - float64(sec)) * 1e9)
return time.Unix(sec, nsec)
}