yao/utils/url/url.go
2024-01-25 20:37:51 +08:00

76 lines
1.6 KiB
Go

package url
import (
"fmt"
"net/url"
"github.com/yaoapp/gou/process"
"github.com/yaoapp/gou/types"
"github.com/yaoapp/kun/exception"
)
// ProcessParseQuery utils.url.ParseQuery
func ProcessParseQuery(process *process.Process) interface{} {
process.ValidateArgNums(1)
queryString := process.ArgsString(0)
params, err := url.ParseQuery(queryString)
if err != nil {
exception.New("make audio captcha error: %s", 500, err).Throw()
}
return params
}
// ProcessParseURL utils.url.ParseURL
func ProcessParseURL(process *process.Process) interface{} {
process.ValidateArgNums(1)
rawurl := process.ArgsString(0)
u, err := url.Parse(rawurl)
if err != nil {
exception.New("parse url error: %s", 500, err).Throw()
}
return map[string]interface{}{
"scheme": u.Scheme,
"host": u.Host,
"domain": u.Hostname(),
"path": u.Path,
"port": u.Port(),
"query": u.Query(),
"url": u.String(),
}
}
// ProcessQueryParam handle the get Template request
func ProcessQueryParam(process *process.Process) interface{} {
process.ValidateArgNums(1)
switch v := process.Args[0].(type) {
case url.Values:
return types.URLToQueryParam(v)
case map[string][]string:
return types.URLToQueryParam(v)
case map[string]interface{}:
values := url.Values{}
for key, value := range v {
switch val := value.(type) {
case []string:
for _, v := range val {
values.Add(key, v)
}
case []interface{}:
for _, v := range val {
values.Add(key, fmt.Sprintf("%v", v))
}
default:
values.Set(key, fmt.Sprintf("%v", value))
}
}
return types.URLToQueryParam(values)
}
v, _ := types.AnyToQueryParam(process.Args[0])
return v
}