geziyor/middleware/duplicate_requests.go
Administrator 688c516c9f 初始化
2024-09-04 16:48:42 +08:00

27 lines
688 B
Go

package middleware
import (
"softdown.com/shusou/geziyor/client"
"softdown.com/shusou/geziyor/internal"
"sync"
)
// DuplicateRequests checks for already visited URLs
type DuplicateRequests struct {
RevisitEnabled bool
visitedURLs sync.Map
logOnlyOnce sync.Map
}
func (a *DuplicateRequests) ProcessRequest(r *client.Request) {
if !a.RevisitEnabled && r.Request.Method == "GET" {
requestURL := r.Request.URL.String()
if _, visited := a.visitedURLs.LoadOrStore(requestURL, struct{}{}); visited {
if _, logged := a.logOnlyOnce.LoadOrStore(requestURL, struct{}{}); !logged {
internal.Logger.Printf("URL already visited %s\n", requestURL)
}
r.Cancel()
}
}
}