func (bp *baseProxyCrawler) OnFetch(fn FetchListener) {
	bp.fetchListener = fn
}
OnFetch set fetch listener
package crawler
import (
	"bytes"
	"fmt"
	"net"
	"net/http"
	"net/url"
	"sync"
	"sync/atomic"
	"time"
	"github.com/PuerkitoBio/goquery"
	"github.com/vicanso/go-axios"
	"github.com/vicanso/proxy-pool/config"
	"github.com/vicanso/proxy-pool/log"
	"go.uber.org/zap"
)
const (
	StatusRunning = iota
	StatusStop
)
const (
	detectRunning = iota + 1
	detectStop
)
const (
	defaultUserAgent     = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
	defaulttProxyTimeout = 10 * time.Second
)
var (
	speedDevides = []time.Duration{750 * time.Millisecond, 1500 * time.Millisecond}
	logger       = log.Default()
	detectConfig = config.GetDetect()
)
type (
	Crawler struct {
		sync.Mutex
		HTTPDetectURL              string
		HTTPSDetectURL             string
		newProxyList               ProxyList
		avaliableProxyList         ProxyList
		newProxyDetectStatus       int32
		availableProxyDetectStatus int32
	}
	baseProxyCrawler struct {
		interval time.Duration
		ins *axios.Instance
		fetchListener FetchListener
		currentPage int
		maxPage int
		status int32
		limitMaxPage int
	}
	FetchListener func(*Proxy)
	ProxyCrawler interface {
		OnFetch(FetchListener)
		Start()
		Stop()
	}
)