共计 1342 个字符,预计需要花费 4 分钟才能阅读完成。
go 标准库(net/url)阅读
url 介绍
- 问题 1:什么是 url?
当我们使用搜索引擎搜索东西的,我们第一步先在浏览器的地址栏里输入 google.com,www.google.com,http://www.google.com。我们在地址栏里输入的东西就是 URL。
URL 又叫统一资源定位符,用于定位我们要访问的文档或者其他资源。 - 问题 2:URL 有什么样的格式?
scheme://[userinfo]@[host]:[port]/path?key1=value1&key2=value2#fragment
协议(http, https, file, ftp)用户信息,是可选的
主机名字或者 ip 地址,定位网络位置
port 服务端口,一般端口表示提供了某项服务
path 主机上的目录
?后的问 query 信息,key1=value1 是表示 key 值和 value 值,& 是连接符
‘#’后面的是 fragment 信息
- 问题 3:URL 如何处理非 ascii 编码?
非 ascii 编码,使用 % 后跟两位 16 进制数表示,如 %AB
URL 中不能有空格,空格用“+”表示。
url 库
我们知道 url 中不能有空格和非 ascii 字符。当我们的 url path 字段中出现这样的字符,我们该如何处理呢。
- url path 字段中有空格和非 ascii 字符
func PathEscape(s string) string
返回的 string 将是 url 可以使用的 % 后跟两位 16 进制数的形式 - 如何把 url 中的 path 字段还原成原始模式
func PathUnescape(s string) (string, err)
a := "hello, 世界" //contain non-ascii code
b := url.PathEscape(a)
fmt.Printf("%v\n", b)
// Output: hello%2C%20%E4%B8%96%E7%95%8C
c, _ := url.PathUnescape(b)
fmt.Printf("%v\n", c)
// Output: hello, 世界
Note: path 中的空格和非 ascii 字符使用同样的方式处理。
- query 字段中出现非 ascii 字符和空格如何处理
func QueryEscape(s string) string
func QueryEscape(s string) (string, error)
Note:空格的处理和 path 不太一样,’ ‘ 将会编程 ’+’
示例: https://github.com/MoonNan/go… - 如何解析 URL
主要通过 Parse 函数来解析 URL 地址。
示例代码:https://github.com/MoonNan/go…
- 如何处理 Query 数据
Query 字段可以通过 ParseQuery 函数来处理。ParseQuery 根据传入的字符串,生成一个 Values 字典。
type Values map[string][]string
方法:
Encode 把 Values 生成字符串
Get Set Del Add
示例代码:https://github.com/MoonNan/go…
- 如何处理 userinfo
type Userinfo 用来处理用户数据
User 和 UserPassword 函数生成 Userinfo 结构体
方法:Userinfo Password Username