|
|
|
|
@@ -21,17 +21,17 @@ type Flaresolverr struct {
|
|
|
|
|
proxy string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetInstance(URL string, sessionID string, proxy string) (*Flaresolverr, error) {
|
|
|
|
|
if instance, ok := instances[URL]; ok {
|
|
|
|
|
func GetInstance(flaresolverrURL string, sessionID string, proxy string) (*Flaresolverr, error) {
|
|
|
|
|
if instance, ok := instances[flaresolverrURL]; ok {
|
|
|
|
|
return instance, nil
|
|
|
|
|
}
|
|
|
|
|
flareSolverr := &Flaresolverr{
|
|
|
|
|
url: URL,
|
|
|
|
|
v1Url: strings.TrimSuffix(URL, "/") + "/v1",
|
|
|
|
|
url: flaresolverrURL,
|
|
|
|
|
v1Url: strings.TrimSuffix(flaresolverrURL, "/") + "/v1",
|
|
|
|
|
sessionID: sessionID,
|
|
|
|
|
proxy: proxy,
|
|
|
|
|
}
|
|
|
|
|
instances[URL] = flareSolverr
|
|
|
|
|
instances[flaresolverrURL] = flareSolverr
|
|
|
|
|
return flareSolverr, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -82,27 +82,27 @@ func (f *Flaresolverr) requestV1(req *V1RequestBase) (*V1ResponseBase, error) {
|
|
|
|
|
return &res, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (f *Flaresolverr) GetV1(URL string, req *V1RequestBase) (*V1ResponseBase, error) {
|
|
|
|
|
func (f *Flaresolverr) GetV1(reqURL string, req *V1RequestBase) (*V1ResponseBase, error) {
|
|
|
|
|
if req == nil {
|
|
|
|
|
req = &V1RequestBase{
|
|
|
|
|
MaxTimeout: 60000, // 60 秒
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
req.Cmd = "request.get"
|
|
|
|
|
req.URL = URL
|
|
|
|
|
req.URL = reqURL
|
|
|
|
|
req.Session = f.sessionID
|
|
|
|
|
|
|
|
|
|
return f.requestV1(req)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (f *Flaresolverr) PostV1(URL string, req *V1RequestBase) (*V1ResponseBase, error) {
|
|
|
|
|
func (f *Flaresolverr) PostV1(reqURL string, req *V1RequestBase) (*V1ResponseBase, error) {
|
|
|
|
|
if req == nil {
|
|
|
|
|
req = &V1RequestBase{
|
|
|
|
|
MaxTimeout: 60000, // 60 秒
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
req.Cmd = "request.post"
|
|
|
|
|
req.URL = URL
|
|
|
|
|
req.URL = reqURL
|
|
|
|
|
req.Session = f.sessionID
|
|
|
|
|
|
|
|
|
|
return f.requestV1(req)
|
|
|
|
|
@@ -157,6 +157,12 @@ func (f *Flaresolverr) preSimulateRequest(opts *SimulateOptions) error {
|
|
|
|
|
}
|
|
|
|
|
f.cycletlsC = NewCycletlsClient(ja3, ua)
|
|
|
|
|
}
|
|
|
|
|
if opts == nil {
|
|
|
|
|
opts = &SimulateOptions{}
|
|
|
|
|
}
|
|
|
|
|
if opts.HttpCookies == nil {
|
|
|
|
|
opts.HttpCookies = []*http.Cookie{}
|
|
|
|
|
}
|
|
|
|
|
opts.Cookies = ConvertToCycletlsCookies(opts.HttpCookies)
|
|
|
|
|
if f.proxy != "" {
|
|
|
|
|
opts.Proxy = f.proxy
|
|
|
|
|
@@ -164,26 +170,30 @@ func (f *Flaresolverr) preSimulateRequest(opts *SimulateOptions) error {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (f *Flaresolverr) SimulateGet(URL string, opts *SimulateOptions) (cycletls.Response, error) {
|
|
|
|
|
func (f *Flaresolverr) SimulateGet(reqURL string, opts *SimulateOptions) (cycletls.Response, error) {
|
|
|
|
|
if opts == nil {
|
|
|
|
|
opts = &SimulateOptions{}
|
|
|
|
|
}
|
|
|
|
|
err := f.preSimulateRequest(opts)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return cycletls.Response{}, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return f.cycletlsC.Get(URL, opts.Options)
|
|
|
|
|
return f.cycletlsC.Get(reqURL, &opts.Options)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (f *Flaresolverr) SimulatePost(URL string, opts *SimulateOptions) (cycletls.Response, error) {
|
|
|
|
|
func (f *Flaresolverr) SimulatePost(reqURL string, opts *SimulateOptions) (cycletls.Response, error) {
|
|
|
|
|
if opts == nil {
|
|
|
|
|
opts = &SimulateOptions{}
|
|
|
|
|
}
|
|
|
|
|
err := f.preSimulateRequest(opts)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return cycletls.Response{}, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return f.cycletlsC.Post(URL, opts.Options)
|
|
|
|
|
return f.cycletlsC.Post(reqURL, &opts.Options)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type SimulateOptions struct {
|
|
|
|
|
*cycletls.Options
|
|
|
|
|
cycletls.Options
|
|
|
|
|
HttpCookies []*http.Cookie
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|