• URL解析验证问题

    • net.ParseIP()只能解析不带冒号以及端口号的IP4/IP6

      • ✔: 127.0.0.12001:db8::68
      • ✖: 127.0.0.1:8080www.baidu.com
    • url.Parse()最好只用来解析标准URL,不能用来验证URL的正确性

func main() {
IP1 := "www.baidu.com"
IP2 := "127.0.0.1"
IP3 := "127.0.0.1:8080"
parsedIP1 := net.ParseIP(IP1)
parsedIP2 := net.ParseIP(IP2)
parsedIP3 := net.ParseIP(IP3)
fmt.Println("net.ParseIP: ", parsedIP1, parsedIP2, parsedIP3) fmt.Println() Url1 := "127.0.0"
Url2 := "abc"
Url3 := "127.0.0.1:8080"
Url4 := "http://127.0.0.1:8080/url" parsedUrl1, err := url.Parse(Url1)
if err != nil {
fmt.Println("Error: ", err)
}
parsedUrl2, err := url.Parse(Url2)
if err != nil {
fmt.Println("Error: ", err)
}
parsedUrl3, err := url.Parse(Url3)
if err != nil {
fmt.Println("Error: ", err)
}
parsedUrl4, err := url.Parse(Url4)
if err != nil {
fmt.Println("Error: ", err)
}
fmt.Println("1: ", parsedUrl1, "2: ", parsedUrl2, "3: ", parsedUrl3, "4: ", parsedUrl4)
}
/*
输出结果:
net.ParseIP: <nil> 127.0.0.1 <nil> Error: parse 127.0.0.1:8080: first path segment in URL cannot contain colon
1: 127.0.0 2: abc 3: <nil> 4: http://127.0.0.1:8080/url */
  • 正确的URL验证方式

    • go get github.com/asaskevich/govalidator
    • govalidator.IsURL()
  • 获取并修改URL之Host、Port、Path

func main() {
rawUrl := "http://127.0.0.1:8080/url/123"
changeHost := "192.168.1.1" newUrl, _ := url.Parse(rawUrl) // Host
newUrlHost := newUrl.Hostname()
// Port
newUrlPort := newUrl.Port()
// Path
newUrlPath := newUrl.Path
// URL类型转string
stringUrl := newUrl.String()
// 修改URl Host
newUrl.Host = changeHost + ":" + newUrl.Port() fmt.Println(newUrlHost, newUrlPort, newUrlPath, stringUrl, newUrl)
}

其他相关方法:

  • Host、Port

    • net.SplitHostPort() ==> Host、Port、error
    • u := strings.Split(url, ":") ==> Host := u[0]
  • Path
    • url := http://www.a.com/123 ==> base := path.Base(url)
    • fmt.Println(base) ==> 123

以上结合可完成关于Golang操作URL的大部分问题

Golang解析、验证、修改URL之Host、Port、Path的更多相关文章

  1. schema://host[:port#]/path/.../[?query-string][#anchor]

    1:http协议状态200 OK最常见的就是成功响应状态码200了, 这表明该请求被成功地完成,所请求的资源发送回客户端 302 Found重定向,新的URL会在response 中的Location ...

  2. intent-filter 之 data 「scheme, host, port, mimeType, path, pathPrefix, pathPattern」

    之前一直搞不很明白 AndroidManifest.xml 中 activity 标签下的 intent-filter 中 data 标签的属性含义,今天认真看了 Dev Guide,又在网上查询了大 ...

  3. HTML5无刷新修改URL

    HTML5新添加了两个api分别是pushState和replaceState,DOM中的window对象通过window.history方法提供了对浏览器历史记录的读取,可以在用户的访问记录中前进和 ...

  4. AngularJS如何修改URL中的参数

    一. 获取url的相关方法(不修改URL): 1.获取当前完整的url路径 var absurl = $location.absUrl(); //http://172.16.0.88:8100/#/h ...

  5. C# 如何获取Url的host以及是否是http

    参考资料:https://sites.google.com/site/netcorenote/asp-net-core/get-scheme-url-host Example there's an g ...

  6. hadoop错误:Does not contain a valid host:port authority

    hadoop环境部署完,执行hdfs zkfc -formatZK命令时,提示如上图所示错误 错误内容: [root@study_1_1 hadoop]# hdfs zkfc -formatZK Ex ...

  7. 启动hadoop报does not contain a valid host:port authority:node2_1:9000

    报错:启动hadoop报does not contain a valid host:port authority:node2_1:9000 原因:主机的hostname不合法,修改为不包含着‘.’ ' ...

  8. A记录(主机名解析)、CNAME(别名解析)和URL转发(域名转发)

    什么是 A记录(主机名解析).CNAME(别名解析)和URL转发(域名转发)? A记录(主机名解析)是最普通的域名解析,是把某一主机名解析到一个IP. 例如www.***.com-> 20.10 ...

  9. Ext.data.Store动态修改url

    store.proxy = new Ext.data.HttpProxy({url:path}); 示例: var ad_store = new Ext.data.JsonStore({ fields ...

随机推荐

  1. mysql 带外注入

    带外通道 有时候注入发现并没有回显,也不能利用时间盲注,那么就可以利用带外通道,也就是利用其他协议或者渠道,如http请求.DNS解析.SMB服务等将数据带出. payload SELECT LOAD ...

  2. MYSQL性能测试工具SYSBENCH

    [root@localhost ~]$ wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0. ...

  3. shell $x的含义

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

  4. django-配置404页面

    setting.py文件配置 # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False ALLOW ...

  5. Ubuntu配置samba服务器

    假设我的Ubuntu用户名:myname 1. 安装和卸载samba: sudo apt-get install samba samba-common sudo apt-get autoremove ...

  6. Acesrc and Travel(2019年杭电多校第八场06+HDU6662+换根dp)

    题目链接 传送门 题意 两个绝顶聪明的人在树上玩博弈,规则是轮流选择下一个要到达的点,每达到一个点时,先手和后手分别获得\(a_i,b_i\)(到达这个点时两个人都会获得)的权值,已经经过的点无法再次 ...

  7. django 基础1

    1.web应用 本质是基于socket实现的应用程序 浏览器---------服务器 2.http协议:应用层协议 1.基于TCP协议 2.基于请求响应 3.短连接 4.无状态 请求协议 浏览器--- ...

  8. 从零开始写Hystrix

    1.springboot+自定义注解实现灵活的切面配置 利用aop我们可以实现业务代码与系统级服务例如日志记录.事务及安全相关业务的解耦,使我们的业务代码更加干净整洁. 首先创建一个springboo ...

  9. Python面试题(3)

    整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...

  10. shell脚本启动所有集群节点

    #profile变量追加到.bashrc中 cat /etc/profile >> ~/.bashrc #start-all-cluster.sh  启动脚本 #!/bin/bash ec ...