You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
872 B
56 lines
872 B
package http
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/url"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
func FormatURLParam(body map[string]interface{}) (urlParam string) {
|
|
var (
|
|
buf strings.Builder
|
|
keys []string
|
|
)
|
|
for k := range body {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
for _, k := range keys {
|
|
v, ok := body[k].(string)
|
|
if !ok {
|
|
v = convertToString(body[k])
|
|
}
|
|
if v != "" {
|
|
buf.WriteString(url.QueryEscape(k))
|
|
buf.WriteByte('=')
|
|
buf.WriteString(url.QueryEscape(v))
|
|
buf.WriteByte('&')
|
|
}
|
|
}
|
|
if buf.Len() <= 0 {
|
|
return ""
|
|
}
|
|
return buf.String()[:buf.Len()-1]
|
|
}
|
|
|
|
func convertToString(v interface{}) (str string) {
|
|
if v == nil {
|
|
return ""
|
|
}
|
|
var (
|
|
bs []byte
|
|
err error
|
|
)
|
|
if bs, err = json.Marshal(v); err != nil {
|
|
return ""
|
|
}
|
|
str = string(bs)
|
|
return
|
|
}
|
|
|
|
func ConvertToString(v interface{}) (str string) {
|
|
str = convertToString(v)
|
|
return
|
|
}
|