Closed
Description
This occurs on v3.
POC:
package main
import (
"context"
"errors"
"log"
"net/http"
"resty.dev/v3"
)
const (
maxRetries int = 5
)
var (
curRetry int
client *resty.Client = resty.New().
SetBaseURL("http://localhost:8080/").
SetDebug(true).
SetRetryCount(maxRetries + 1)
)
func httpHandle(resp http.ResponseWriter, req *http.Request) {
if curRetry < maxRetries {
resp.WriteHeader(http.StatusTooManyRequests)
curRetry++
}
// spew.Dump(req)
_, _ = resp.Write([]byte(req.URL.String() + "\n"))
}
func main() {
var err error
var srv *http.Server
var mux *http.ServeMux
var req *resty.Request
var resp *resty.Response
mux = http.NewServeMux()
mux.HandleFunc("/", httpHandle)
srv = &http.Server{
Addr: ":8080",
Handler: mux,
}
go func() {
var hErr error
if hErr = srv.ListenAndServe(); hErr != nil {
if !errors.Is(err, http.ErrServerClosed) {
log.Println(err)
}
}
}()
req = client.R()
req.SetQueryParamsFromValues(map[string][]string{
"foo": []string{
"baz",
"bar",
"bar",
},
})
req.Method = http.MethodGet
req.URL = ""
if resp, err = req.Send(); err != nil {
log.Panicln(err)
}
if err = srv.Shutdown(context.Background()); err != nil {
log.Panicln(err)
}
_ = resp
}
$ go run main.go 2>&1 | grep -E '^GET\s+'
GET /?foo=baz&foo=bar&foo=bar HTTP/1.1
GET /?foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar HTTP/1.1
GET /?foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar HTTP/1.1
GET /?foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar HTTP/1.1
GET /?foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar HTTP/1.1
GET /?foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar&foo=baz&foo=bar&foo=bar HTTP/1.1