Golang解析、验证、修改URL之Host、Port、Path
- URL解析验证问题
net.ParseIP()
只能解析不带冒号以及端口号的IP4/IP6- ✔:
127.0.0.1
、2001:db8::68
- ✖:
127.0.0.1:8080
、www.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的更多相关文章
- schema://host[:port#]/path/.../[?query-string][#anchor]
1:http协议状态200 OK最常见的就是成功响应状态码200了, 这表明该请求被成功地完成,所请求的资源发送回客户端 302 Found重定向,新的URL会在response 中的Location ...
- intent-filter 之 data 「scheme, host, port, mimeType, path, pathPrefix, pathPattern」
之前一直搞不很明白 AndroidManifest.xml 中 activity 标签下的 intent-filter 中 data 标签的属性含义,今天认真看了 Dev Guide,又在网上查询了大 ...
- HTML5无刷新修改URL
HTML5新添加了两个api分别是pushState和replaceState,DOM中的window对象通过window.history方法提供了对浏览器历史记录的读取,可以在用户的访问记录中前进和 ...
- AngularJS如何修改URL中的参数
一. 获取url的相关方法(不修改URL): 1.获取当前完整的url路径 var absurl = $location.absUrl(); //http://172.16.0.88:8100/#/h ...
- C# 如何获取Url的host以及是否是http
参考资料:https://sites.google.com/site/netcorenote/asp-net-core/get-scheme-url-host Example there's an g ...
- hadoop错误:Does not contain a valid host:port authority
hadoop环境部署完,执行hdfs zkfc -formatZK命令时,提示如上图所示错误 错误内容: [root@study_1_1 hadoop]# hdfs zkfc -formatZK Ex ...
- 启动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不合法,修改为不包含着‘.’ ' ...
- A记录(主机名解析)、CNAME(别名解析)和URL转发(域名转发)
什么是 A记录(主机名解析).CNAME(别名解析)和URL转发(域名转发)? A记录(主机名解析)是最普通的域名解析,是把某一主机名解析到一个IP. 例如www.***.com-> 20.10 ...
- Ext.data.Store动态修改url
store.proxy = new Ext.data.HttpProxy({url:path}); 示例: var ad_store = new Ext.data.JsonStore({ fields ...
随机推荐
- mysql 带外注入
带外通道 有时候注入发现并没有回显,也不能利用时间盲注,那么就可以利用带外通道,也就是利用其他协议或者渠道,如http请求.DNS解析.SMB服务等将数据带出. payload SELECT LOAD ...
- MYSQL性能测试工具SYSBENCH
[root@localhost ~]$ wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0. ...
- shell $x的含义
linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...
- django-配置404页面
setting.py文件配置 # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False ALLOW ...
- Ubuntu配置samba服务器
假设我的Ubuntu用户名:myname 1. 安装和卸载samba: sudo apt-get install samba samba-common sudo apt-get autoremove ...
- Acesrc and Travel(2019年杭电多校第八场06+HDU6662+换根dp)
题目链接 传送门 题意 两个绝顶聪明的人在树上玩博弈,规则是轮流选择下一个要到达的点,每达到一个点时,先手和后手分别获得\(a_i,b_i\)(到达这个点时两个人都会获得)的权值,已经经过的点无法再次 ...
- django 基础1
1.web应用 本质是基于socket实现的应用程序 浏览器---------服务器 2.http协议:应用层协议 1.基于TCP协议 2.基于请求响应 3.短连接 4.无状态 请求协议 浏览器--- ...
- 从零开始写Hystrix
1.springboot+自定义注解实现灵活的切面配置 利用aop我们可以实现业务代码与系统级服务例如日志记录.事务及安全相关业务的解耦,使我们的业务代码更加干净整洁. 首先创建一个springboo ...
- Python面试题(3)
整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...
- shell脚本启动所有集群节点
#profile变量追加到.bashrc中 cat /etc/profile >> ~/.bashrc #start-all-cluster.sh 启动脚本 #!/bin/bash ec ...