golang中为我们提供了url.Parse,专门用来解析协议的url,比如http、https,rtsp,rtmp 等协议。
为什么能够解析这些不同的协议呢,只要遵循下面的格式即可
// 双斜杠地址
scheme://[userinfo@]host/path[?query][#fragment]
// 非双斜杠地址
scheme:opaque[?query][#fragment]
示例一:解析HTTP
func ParseHttp(clientUrl string) {
u, _ := url.Parse(clientUrl) //将string解析成*URL格式
fmt.Println(u) // go?a=123&b=456
fmt.Println(u.RawQuery) //编码后的查询字符串,没有'?' a=123&b=456
values, _ := url.ParseQuery(u.RawQuery) //返回Values类型的字典
fmt.Println(values) // map[a:[123] b:[456]]
fmt.Println(values["a"]) //[123]
fmt.Println(values.Get("b")) //456
}
func main(){
ParseHttp("http://localhost:8080/go?a=123&b=456")
}
示例二:解析RTSP
func ParseRtsp(r string) (err error) {
l, err := url.Parse(r)
if err != nil {
return err
}
fmt.Println(l.Scheme)
fmt.Println(l.Hostname())
fmt.Println(l.User.Password())
fmt.Println(l.User.Username())
fmt.Println(l.Path)
if strings.ToLower(l.Scheme) != "rtsp" {
err = fmt.Errorf("RTSP url is invalid")
return err
}
if strings.ToLower(l.Hostname()) == "" {
err = fmt.Errorf("RTSP url is invalid")
return err
}
port := l.Port()
fmt.Println(port)
if len(port) == 0 {
port = "554"
}
return nil
}
func main() {
ParseRtsp("rtsp://exp_admin:exp_passwd@192.168.5.152:554")
}
本文介绍了Go语言中的url.Parse函数如何用于解析HTTP和RTSP等不同协议的URL。通过示例代码展示了如何解析HTTP URL,获取查询参数,并详细解释了URL的组成部分。同时,还提供了RTSP URL的解析示例,确保URL的格式正确并提取相关信息。
1021

被折叠的 条评论
为什么被折叠?



