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 ...
随机推荐
- Qt中QWidget、QDialog和QMainWindow
QWidget 类是所有用户界面对象的基类.只有一个"页面" QMainWindow 是一个"窗口".含有菜单栏.状态栏.工具栏.停靠窗口.中心窗口 QDial ...
- SRT字幕格式
[时间:2019-03] [状态:Open] [关键词:字幕,SRT,文件格式] 0 引言 视频文件中最简单.最常见的外挂字幕格式是SRT(SubRip Text).本人找了好久也没找到类似的标准文档 ...
- 目标检测论文解读6——SSD
背景 R-CNN系列算法检测速度不够快,YOLO v1检测准确率较低,而且无法检测到密集目标. 方法 SSD算法跟YOLO类似,都属于one stage的算法,即通过回归算法直接从原图得到预测结果,为 ...
- Codeforces D. The Sum of the k-th Powers(拉格朗日插值)
题目描述: The Sum of the k-th Powers time limit per test 2 seconds memory limit per test 256 megabytes i ...
- GCN总结
一.GCN简介 GNN模型主要研究图节点的表示(Graph Embedding),图边结构预测任务和图的分类问题,后两个任务也是基于Graph Embedding展开的.目前论文重点研究网络的可扩展性 ...
- 栈 队列 hash表 堆 算法模板和相关题目
什么是栈(Stack)? 栈(stack)是一种采用后进先出(LIFO,last in first out)策略的抽象数据结构.比如物流装车,后装的货物先卸,先转的货物后卸.栈在数据结构中的地位很重要 ...
- Java多线程编程核心技术-第1章-Java多线程技能-读书笔记
第 1 章 Java 多线程技能 本章主要内容 线程的启动 如何使线程暂停 如何使线程停止 线程的优先级 线程安全相关的问题 1.1 进程和多线程的概念及线程的优点 进程是操作系统结构的基础:是一次程 ...
- 06-C#笔记-常量
1. 进制 前缀:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制. 后缀:可以是 U 或 L 的组合,其中,U 和 L 分别表示 unsigned 和 long.后缀可以是大写或者 ...
- AtCoder Grand Contest 033 题解
传送门 我比赛的时候怕不是在睡觉啊-- \(A\ Darker\ and\ Darker\) 我是不是想得太复杂了--根本没必要像我这样做吧-- 首先问题可以转化成令\(p_{i,j}\)表示到\(( ...
- 使用kubernetes管理包的常用命令
常用命令是: ## 获取指定命名空间(rubikt)下所有的部署的服务 kubectl.exe get deployments --namespace rubikt ## 获取制定命名空间(rubik ...