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/govalidatorgovalidator.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、erroru := 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 ...
随机推荐
- 十、lambda表达式、内置函数之filter、map、reduce
lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 == : name = 'wupeiqi' else: name = 'ale ...
- Leetcode周赛164
目录 访问所有点的最小时间 思路 代码 统计参与通信的服务器 思路 代码 搜索推荐系统 思路 代码 停在原地的方案数 思路 代码 访问所有点的最小时间 思路 由于每次移动有水平方向移动一格.竖直方向移 ...
- Python多线程采集百度相关搜索关键词
百度相关搜索关键词抓取,读取txt关键词,导出txt关键词 #百度相关搜索关键词抓取,读取txt关键词,导出txt关键词 # -*- coding=utf-8 -*- import request ...
- 01-linux-基本语法-sh文件
在一些开源库中,往往有一个 xxx.sh 的安装文件.命令“./ xxx.sh” 就可运行之. 其实内部是一些 linux 的语句.整合起来,方便使用而已. 介绍一下常用的一些Linux语句 cd b ...
- CentOS7 开放端口 通过 firewall-cmd 工具来操作防火墙
CentOS7 提供了 firewall-cmd 工具来操作防火墙. firewall-cmd --permanent:表示设置为持久,配置被写入配置文件,跨重启,不会立即生效,重新加载配置后生效.不 ...
- 【Mybatis】传入参数 对象+单参
Integer update( @Param(value="bean") TXNJSTXNDetailTBBean bean, @Param(value="table&q ...
- JSPDF支持中文(思源黑体)采坑之旅,JSPDF中文字体乱码解决方案
我拍个砖,通常标称自己文章完美解决何种问题的,往往就是解决不了任何问题! 众所周知,JSPDF是一个开源的,易用的,但是对中文支持非常差的PDF库. 下面,我教大家,如何在pdf中使用思源黑体.思源黑 ...
- Pandas | 27 注意事项&窍门
警告和疑难意味着一个看不见的问题.在使用Pandas过程中,需要特别注意的地方. 与Pandas一起使用If/Truth语句 当尝试将某些东西转换成布尔值时,Pandas遵循了一个错误的惯例. 这种情 ...
- debian 9 安装远程桌面
1. 安装远程桌面服务: apt-get install xrdp 2. 修改设置文件 dpkg-reconfigure xserver-xorg-legacy 设置为anybody 3. 使用ms ...
- label的作用是什么?怎么用的?
label便签用可以让用户点击文字区域,自动聚焦到当前项的input框. input设置id属性,label设置for属性,for属性的属性值为id属性值.