文档章节

golang的net/url包

刘地
 刘地
发布于 2014/08/21 10:15
字数 1523
阅读 9113
收藏 1

package url

import "net/url"

url包解析URL并实现了查询的逸码,参见RFC 3986

Index

Examples

Package Files

url.go

func QueryEscape

func QueryEscape(s string) string

QueryEscape函数对s进行转码使之可以安全的用在URL查询里。

func QueryUnescape

func QueryUnescape(s string) (string, error)

QueryUnescape函数用于将QueryEscape转码的字符串还原。它会把%AB改为字节0xAB,将'+'改为' '。如果有某个%后面未跟两个十六进制数字,本函数会返回错误。

type Error

type Error struct { Op string URL string Err error }

Error会报告一个错误,以及导致该错误发生的URL和操作。

func (*Error) Error

func (e *Error) Error() string

type EscapeError

type EscapeError string

func (EscapeError) Error

func (e EscapeError) Error() string

type URL

type URL struct { Scheme string Opaque string // 编码后的不透明数据 User *Userinfo // 用户名和密码信息 Host string // hosthost:port Path string RawQuery string // 编码后的查询字符串,没有'?' Fragment string // 引用的片段(文档位置),没有'#' }

URL类型代表一个解析后的URL(或者说,一个URL参照)。URL基本格式如下:

scheme://[userinfo@]host/path[?query][#fragment]

scheme后不是冒号加双斜线的URL被解释为如下格式:

scheme:opaque[?query][#fragment]

注意路径字段是以解码后的格式保存的,如/%47%6f%2f会变成/Go/。这导致我们无法确定Path字段中的斜线是来自原始URL还是解码前的%2f。除非一个客户端必须使用其他程序/函数来解析原始URL或者重构原始URL,这个区别并不重要。此时,HTTP服务端可以查询req.RequestURI,而HTTP客户端可以使用URL{Host: "example.com", Opaque: "//example.com/Go%2f"}代替{Host: "example.com", Path: "/Go/"}

func Parse

func Parse(rawurl string) (url *URL, err error)

Parse函数解析rawurl为一个URL结构体,rawurl可以是绝对地址,也可以是相对地址。

func ParseRequestURI

func ParseRequestURI(rawurl string) (url *URL, err error)

ParseRequestURI函数解析rawurl为一个URL结构体,本函数会假设rawurl是在一个HTTP请求里,因此会假设该参数是一个绝对URL或者绝对路径,并会假设该URL没有#fragment后缀。(网页浏览器会在去掉该后缀后才将网址发送到网页服务器)

func (*URL) IsAbs

func (u *URL) IsAbs() bool

函数在URL是绝对URL时才返回真。

func (*URL) Query

func (u *URL) Query() Values

Query方法解析RawQuery字段并返回其表示的Values类型键值对。

func (*URL) RequestURI

func (u *URL) RequestURI() string

RequestURI方法返回编码好的path?queryopaque?query字符串,用在HTTP请求里。

func (*URL) String

func (u *URL) String() string

String将URL重构为一个合法URL字符串。

func (*URL) Parse

func (u *URL) Parse(ref string) (*URL, error)

Parse方法以u为上下文来解析一个URLref可以是绝对或相对URL

本方法解析失败会返回nil, err;否则返回结果和ResolveReference一致。

func (*URL) ResolveReference

func (u *URL) ResolveReference(ref *URL) *URL

本方法根据一个绝对URI将一个URI补全为一个绝对URI,参见RFC 3986  5.2。参数ref可以是绝对URI或者相对URIResolveReference总是返回一个新的URL实例,即使该实例和u或者ref完全一样。如果ref是绝对URI,本方法会忽略参照URI并返回ref的一个拷贝。

type Userinfo

type Userinfo struct { // 内含隐藏或非导出字段 }

Userinfo类型是一个URL的用户名和密码细节的一个不可修改的封装。一个真实存在的Userinfo值必须保证有用户名(但根据 RFC 2396可以是空字符串)以及一个可选的密码。

func User

func User(username string) *Userinfo

User函数返回一个用户名设置为username的不设置密码的*Userinfo

func UserPassword

func UserPassword(username, password string) *Userinfo

UserPassword函数返回一个用户名设置为username、密码设置为password*Userinfo

这个函数应该只用于老式的站点,因为风险很大,不建议使用,参见RFC 2396

func (*Userinfo) Username

func (u *Userinfo) Username() string

Username方法返回用户名。

func (*Userinfo) Password

func (u *Userinfo) Password() (string, bool)

如果设置了密码返回密码和真,否则会返回假。

func (*Userinfo) String

func (u *Userinfo) String() string

String方法返回编码后的用户信息,格式为"username[:password]"

type Values

type Values map[string][]string

Values将建映射到值的列表。它一般用于查询的参数和表单的属性。不同于http.Header这个字典类型,Values的键是大小写敏感的。

func ParseQuery

func ParseQuery(query string) (m Values, err error)

ParseQuery函数解析一个URL编码的查询字符串,并返回可以表示该查询的Values类型的字典。本函数总是返回一个包含了所有合法查询参数的非nil字典,err用来描述解码时遇到的(如果有)第一个错误。

func (Values) Get

func (v Values) Get(key string) string

Get会获取key对应的值集的第一个值。如果没有对应key的值集会返回空字符串。获取值集请直接用map

func (Values) Set

func (v Values) Set(key, value string)

Set方法将key对应的值集设为只有value,它会替换掉已有的值集。

func (Values) Add

func (v Values) Add(key, value string)

Addvalue添加到key关联的值集里原有的值的后面。

func (Values) Del

func (v Values) Del(key string)

Del删除key关联的值集。

func (Values) Encode

func (v Values) Encode() string

Encode方法将v编码为url编码格式("bar=baz&foo=quux"),编码时会以键进行排序。

© 著作权归作者所有

上一篇: golang的fmt包
下一篇: golang的net/http包
刘地
粉丝 101
博文 52
码字总数 69858
作品 1
朝阳
私信 提问
golang web编程

golang web编程 go语言web框架beego的helloword示例 //安装beego模块 //E:>set GOPATH=E:resourceprojectweb_crawler //E:>go get github.com/… golang web编程五:提交url抓取页面内容并且......

d_watson
2016/05/27
48
0
Golang依赖关联工具:glide从入门到精通使用

介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题。Java有牛逼轰轰的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要给大家介绍gilde。 gl...

梦朝思夕
2017/07/19
0
0
windows 下的 eclipse安装goclipse 配置golang开发环境

下载goclipse eclipse plugins http://goclipse.googlecode.com/svn/trunk/goclipse-update-site/ (建议使用proxy下载,除非你能直接访问;)) 我在百度网盘上传了最新的goclipse插件包,提...

hotkit
2014/11/22
3K
0
B站直播:使用Golang重构,流量最大的推送功能

1 悲剧直播推送功能 ****** 1.1 B站直播推送功能的困境 ***B站直播有个推送功能,就是这里,看到那个红色的数字没有,显示你关注的主播开播人数。 然后每个进入B站的用户,不管是不是直播的观...

anoty
2016/10/22
1K
1
Golang Web学习(13)—— 搭建简单的Web服务器

本文为转载,原文:Golang Web学习(13)—— 搭建简单的Web服务器 Golang 1、Web工作方式 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要 浏览的内容。...

ChainZhang
2018/01/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
11
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
9
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部