req icon indicating copy to clipboard operation
req copied to clipboard

query参数排序问题

Open chenyu1990 opened this issue 2 years ago • 1 comments

有些请求,query参数的顺序不能打乱,比如某音的。 如何禁止query参数自动排序?

chenyu1990 avatar Oct 12 '22 04:10 chenyu1990

还有这种?对于这种不符合规范的接口实现,只有自行按顺序拼接下了,下面给个可运行的例子:

package main

import (
	"github.com/imroc/req/v3"
	"net/url"
	"strings"
)

func main() {
	req.EnableDebugLog()
	params := encodeParams(
		"c", "c",
		"a", "a",
		"3", "3",
		"1", "1",
	)
	req.R().MustGet("https://httpbin.org/get?" + params)
}

func encodeParams(s ...string) string {
	ss := []string{}
	for i := 0; i < len(s); i += 2 {
		if i+1 >= len(s) {
			break
		}
		ss = append(ss, encodeParam(s[i], s[i+1]))
	}
	return strings.Join(ss, "&")
}

func encodeParam(key, value string) string {
	param := make(url.Values)
	param.Set(key, value)
	return param.Encode()
}

输出:

2022/10/12 14:45:22.250753 DEBUG [req] HTTP/2 GET https://httpbin.org/get?c=c&a=a&3=3&1=1

imroc avatar Oct 12 '22 06:10 imroc