From 96f82cc6ac5600982ae8f12258af677d2be52f17 Mon Sep 17 00:00:00 2001 From: "Ryan J. Geyer" Date: Wed, 21 Jul 2021 12:33:36 -0700 Subject: [PATCH] Improved handling of pagination URIs --- exporter/http.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/exporter/http.go b/exporter/http.go index a0d8cc37..9f2533a9 100644 --- a/exporter/http.go +++ b/exporter/http.go @@ -4,8 +4,8 @@ import ( "fmt" "io/ioutil" "net/http" + neturl "net/url" "strconv" - "strings" "time" log "github.com/sirupsen/logrus" @@ -72,17 +72,23 @@ func paginateTargets(targets []string, token string) []string { for _, link := range links { if link.Rel == "last" { - subs := strings.Split(link.URL, "&page=") + u, err := neturl.Parse(link.URL) + if err != nil { + log.Errorf("Unable to parse page URL, Error: %s", err) + } + + q := u.Query() - lastPage, err := strconv.Atoi(subs[len(subs)-1]) + lastPage, err := strconv.Atoi(q.Get("page")) if err != nil { log.Errorf("Unable to convert page substring to int, Error: %s", err) } // add all pages to the slice of targets to return for page := 2; page <= lastPage; page++ { - pageURL := fmt.Sprintf("%s&page=%v", url, page) - paginated = append(paginated, pageURL) + q.Set("page", strconv.Itoa(page)) + u.RawQuery = q.Encode() + paginated = append(paginated, u.String()) } break