package nuapi import ( "compress/gzip" "context" "fmt" "os/exec" "git.milar.in/milarin/adverr" "github.com/PuerkitoBio/goquery" ) func (api *Api) GetWithCookie(ctx context.Context, url string) (*goquery.Document, error) { if api.Cookie == "" { return nil, ErrNoCookieSet.New() } curl := exec.CommandContext(ctx, "curl", "-s", url, "-H", fmt.Sprintf("User-Agent: %s", api.UserAgent), "-H", fmt.Sprintf("Cookie: %s", api.Cookie), "-H", fmt.Sprintf("Accept-Encoding: %s", "gzip"), ) stdout, err := curl.StdoutPipe() if err != nil { return nil, ErrCurlRequestFailed.Wrap(err, url) } defer stdout.Close() stderr, err := curl.StderrPipe() if err != nil { return nil, ErrCurlRequestFailed.Wrap(err, url) } defer stderr.Close() if err := curl.Start(); err != nil { return nil, ErrCurlRequestFailed.Wrap(err, url) } go func() { if err := curl.Wait(); err != nil { adverr.Println(ErrCurlRequestFailed.Wrap(err, url)) } }() r, err := gzip.NewReader(stdout) if err != nil { return nil, ErrInvalidGzipData.New(err) } return goquery.NewDocumentFromReader(r) } func (api *Api) Get(ctx context.Context, url string) (*goquery.Document, error) { curl := exec.CommandContext(ctx, "curl", "-s", url, "-H", fmt.Sprintf("User-Agent: %s", api.UserAgent), "-H", fmt.Sprintf("Accept-Encoding: %s", "gzip"), ) stdout, err := curl.StdoutPipe() if err != nil { return nil, ErrCurlRequestFailed.Wrap(err, url) } defer stdout.Close() stderr, err := curl.StderrPipe() if err != nil { return nil, ErrCurlRequestFailed.Wrap(err, url) } defer stderr.Close() if err := curl.Start(); err != nil { return nil, ErrCurlRequestFailed.Wrap(err, url) } go func() { if err := curl.Wait(); err != nil { adverr.Println(ErrCurlRequestFailed.Wrap(err, url)) } }() r, err := gzip.NewReader(stdout) if err != nil { return nil, ErrInvalidGzipData.New(err) } return goquery.NewDocumentFromReader(r) }