Skip to content

Retry duplicates query parameters in v3.0.0-alpha.6 #938

Closed
@nf-brentsaner

Description

@nf-brentsaner

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

Metadata

Metadata

Assignees

Labels

bugv3For resty v3

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions