package main import ( "bufio" "context" "fmt" "log" "os" "github.com/x0xO/hhttp" ) func Saver(result chan string) { f, err := os.OpenFile("result.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { log.Println(err) } defer f.Close() for res := range result { log.Println("GOOD " + res) if _, err := f.WriteString(res + "\n"); err != nil { log.Println(err) } } } func taker(jobs chan *hhttp.Response, errors chan error, result chan string) { for jobs != nil && errors != nil { select { case job, ok := <-jobs: if !ok { jobs = nil continue } if job.Body.Limit(10).Contains("/*!") { fmt.Println("FOUND" + job.URL.Host) result <- job.URL.Host } case err, ok := <-errors: if !ok { errors = nil continue } fmt.Println(err) } } } func main() { result := make(chan string) var counter int64 ctx, cancel := context.WithCancel(context.Background()) // ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) defer cancel() /* == URLS CHAN START == */ urlsChan := make(chan string) go func() { defer close(urlsChan) file, err := os.Open("ru.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) scanflag := false for scanner.Scan() { domain := scanner.Text() if scanflag == false && domain != "bettermeetings.as" { continue } else if domain == "bettermeetings.as" { scanflag = true continue } url := "http://" + domain + "/wp-includes/js/jquery/jquery-migrate.js" urlsChan <- url counter++ if counter%1000 == 0 { log.Println(counter) } } }() jobs, errors := hhttp.NewClient().Async.WithContext(ctx).Get(urlsChan).Pool(100).Do() // urls chan string go taker(jobs, errors, result) go Saver(result) for { } }