|
4 | 4 | "encoding/json"
|
5 | 5 | "fmt"
|
6 | 6 | "net/http"
|
| 7 | + "net/url" |
| 8 | + "reflect" |
7 | 9 | "strings"
|
8 | 10 | "time"
|
9 | 11 |
|
@@ -35,21 +37,33 @@ func (c *Client) sendRequest(method string, path string, params interface{}) (*r
|
35 | 37 | req.Method = method
|
36 | 38 | req.URL = "https://cdn.api.baishan.com" + path
|
37 | 39 | if strings.EqualFold(method, http.MethodGet) {
|
38 |
| - qs := make(map[string]string) |
| 40 | + qs := url.Values{} |
39 | 41 | if params != nil {
|
40 | 42 | temp := make(map[string]any)
|
41 | 43 | jsonb, _ := json.Marshal(params)
|
42 | 44 | json.Unmarshal(jsonb, &temp)
|
43 | 45 | for k, v := range temp {
|
44 | 46 | if v != nil {
|
45 |
| - qs[k] = fmt.Sprintf("%v", v) |
| 47 | + rv := reflect.ValueOf(v) |
| 48 | + switch rv.Kind() { |
| 49 | + case reflect.Slice, reflect.Array: |
| 50 | + for i := 0; i < rv.Len(); i++ { |
| 51 | + qs.Add(fmt.Sprintf("%s[]", k), fmt.Sprintf("%v", rv.Index(i).Interface())) |
| 52 | + } |
| 53 | + case reflect.Map: |
| 54 | + for _, rk := range rv.MapKeys() { |
| 55 | + qs.Add(fmt.Sprintf("%s[%s]", k, rk.Interface()), fmt.Sprintf("%v", rv.MapIndex(rk).Interface())) |
| 56 | + } |
| 57 | + default: |
| 58 | + qs.Set(k, fmt.Sprintf("%v", v)) |
| 59 | + } |
46 | 60 | }
|
47 | 61 | }
|
48 | 62 | }
|
49 | 63 |
|
50 | 64 | req = req.
|
51 |
| - SetQueryParams(qs). |
52 |
| - SetQueryParam("token", c.apiToken) |
| 65 | + SetQueryParam("token", c.apiToken). |
| 66 | + SetQueryParamsFromValues(qs).SetDebug(true) |
53 | 67 | } else {
|
54 | 68 | req = req.
|
55 | 69 | SetHeader("Content-Type", "application/json").
|
|
0 commit comments