Lazy initialization Flaresolverr.cycletlsC

This commit is contained in:
nite07 2025-02-27 13:34:56 +11:00
parent d2eb26d4ac
commit fd3b5ce79e

View File

@ -30,11 +30,6 @@ func GetInstance(URL string, sessionID string, proxy string) (*Flaresolverr, err
sessionID: sessionID, sessionID: sessionID,
proxy: proxy, proxy: proxy,
} }
ua, ja3, err := flareSolverr.GetJa3AndUserAgent()
if err != nil {
return nil, err
}
flareSolverr.cycletlsC = NewCycletlsClient(ja3, ua)
instances[URL] = flareSolverr instances[URL] = flareSolverr
return flareSolverr, nil return flareSolverr, nil
} }
@ -144,19 +139,36 @@ func (f *Flaresolverr) GetJa3AndUserAgent() (ua string, ja3 string, err error) {
return resp.Solution.UserAgent, resp.Solution.RawResponse.(map[string]any)["tls"].(map[string]any)["ja3"].(string), nil return resp.Solution.UserAgent, resp.Solution.RawResponse.(map[string]any)["tls"].(map[string]any)["ja3"].(string), nil
} }
func (f *Flaresolverr) SimulateGet(URL string, opts *SimulateOptions) (cycletls.Response, error) { func (f *Flaresolverr) preSimulateRequest(opts *SimulateOptions) error {
if f.cycletlsC == nil {
ua, ja3, err := f.GetJa3AndUserAgent()
if err != nil {
return err
}
f.cycletlsC = NewCycletlsClient(ja3, ua)
}
opts.Cookies = ConvertToCycletlsCookies(opts.HttpCookies) opts.Cookies = ConvertToCycletlsCookies(opts.HttpCookies)
if f.proxy != "" { if f.proxy != "" {
opts.Proxy = f.proxy opts.Proxy = f.proxy
} }
return nil
}
func (f *Flaresolverr) SimulateGet(URL string, opts *SimulateOptions) (cycletls.Response, error) {
err := f.preSimulateRequest(opts)
if err != nil {
return cycletls.Response{}, err
}
return f.cycletlsC.Get(URL, &opts.Options) return f.cycletlsC.Get(URL, &opts.Options)
} }
func (f *Flaresolverr) SimulatePost(URL string, opts *SimulateOptions) (cycletls.Response, error) { func (f *Flaresolverr) SimulatePost(URL string, opts *SimulateOptions) (cycletls.Response, error) {
opts.Cookies = ConvertToCycletlsCookies(opts.HttpCookies) err := f.preSimulateRequest(opts)
if f.proxy != "" { if err != nil {
opts.Proxy = f.proxy return cycletls.Response{}, err
} }
return f.cycletlsC.Post(URL, &opts.Options) return f.cycletlsC.Post(URL, &opts.Options)
} }