Package url

import "net/url"
Overview
Index
Examples

Overview ▾

包url解析URL并实现查询转义.

Index ▾

func PathEscape(s string) string
func PathUnescape(s string) (string, error)
func QueryEscape(s string) string
func QueryUnescape(s string) (string, error)
type Error
    func (e *Error) Error() string
    func (e *Error) Temporary() bool
    func (e *Error) Timeout() bool
    func (e *Error) Unwrap() error
type EscapeError
    func (e EscapeError) Error() string
type InvalidHostError
    func (e InvalidHostError) Error() string
type URL
    func Parse(rawurl string) (*URL, error)
    func ParseRequestURI(rawurl string) (*URL, error)
    func (u *URL) EscapedPath() string
    func (u *URL) Hostname() string
    func (u *URL) IsAbs() bool
    func (u *URL) MarshalBinary() (text []byte, err error)
    func (u *URL) Parse(ref string) (*URL, error)
    func (u *URL) Port() string
    func (u *URL) Query() Values
    func (u *URL) RequestURI() string
    func (u *URL) ResolveReference(ref *URL) *URL
    func (u *URL) String() string
    func (u *URL) UnmarshalBinary(text []byte) error
type Userinfo
    func User(username string) *Userinfo
    func UserPassword(username, password string) *Userinfo
    func (u *Userinfo) Password() (string, bool)
    func (u *Userinfo) String() string
    func (u *Userinfo) Username() string
type Values
    func ParseQuery(query string) (Values, error)
    func (v Values) Add(key, value string)
    func (v Values) Del(key string)
    func (v Values) Encode() string
    func (v Values) Get(key string) string
    func (v Values) Set(key, value string)

Package files

url.go

func PathEscape 1.8

func PathEscape(s string) string

PathEscape对字符串进行转义,以便可以将其安全地放置在URL路径段内,并根据需要用%XX序列替换特殊字符(包括/).

func PathUnescape 1.8

func PathUnescape(s string) (string, error)

PathUnescape进行PathEscape的逆变换,将形式为"%AB"的每个3字节编码子字符串转换为十六进制解码字节0xAB. 如果任何%后面没有两个十六进制数字,则返回错误.

PathUnescape与QueryUnescape相同,除了它不将'+'转换为''(空格).

func QueryEscape

func QueryEscape(s string) string

QueryEscape对字符串进行转义,以便可以将其安全地放置在URL查询中.

func QueryUnescape

func QueryUnescape(s string) (string, error)

QueryUnescape进行QueryEscape的逆变换,将形式为"%AB"的每个3字节编码子字符串转换为十六进制解码字节0xAB. 如果任何%后面没有两个十六进制数字,则返回错误.

type Error

错误报告错误以及导致错误的操作和URL.

type Error struct {
    Op  string
    URL string
    Err error
}

func (*Error) Error

func (e *Error) Error() string

func (*Error) Temporary 1.6

func (e *Error) Temporary() bool

func (*Error) Timeout 1.6

func (e *Error) Timeout() bool

func (*Error) Unwrap 1.13

func (e *Error) Unwrap() error

type EscapeError

type EscapeError string

func (EscapeError) Error

func (e EscapeError) Error() string

type InvalidHostError 1.6

type InvalidHostError string

func (InvalidHostError) Error 1.6

func (e InvalidHostError) Error() string

type URL

URL代表解析的URL(技术上是URI引用).

表示的一般形式是:

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

方案后不以斜杠开头的URL解释为:

scheme:opaque[?query][#fragment]

请注意,Path字段以解码形式存储:/%47%6f%2f变为/ Go /. 结果是,无法确定路径中的斜线是原始URL中的斜线,以及哪个是%2f. 这种区别很少很重要,但是在这种情况下,代码应使用RawPath,这是一个可选字段,仅当默认编码与Path不同时才设置该字段.

URL的String方法使用EscapedPath方法获取路径. 有关更多详细信息,请参见EscapedPath方法.

type URL struct {
    Scheme     string
    Opaque     string    // encoded opaque data
    User       *Userinfo // username and password information
    Host       string    // host or host:port
    Path       string    // path (relative paths may omit leading slash)
    RawPath    string    // encoded path hint (see EscapedPath method); added in Go 1.5
    ForceQuery bool      // append a query ('?') even if RawQuery is empty; added in Go 1.7
    RawQuery   string    // encoded query values, without '?'
    Fragment   string    // fragment for references, without '#'
}

Example

https://google.com/search?q=golang

示例(往返)

/foo/bar
/foo%2fbar
https://example.com/foo%2fbar

func Parse

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

解析将rawurl解析为URL结构.

rawurl可以是相对的(无主机的路径)或绝对的(以方案开头). 尝试在不使用方案的情况下解析主机名和路径是无效的,但由于解析不明确,可能不一定会返回错误.

func ParseRequestURI

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

ParseRequestURI将rawurl解析为URL结构. 它假定在​​HTTP请求中接收到rawurl,因此rawurl仅解释为绝对URI或绝对路径. 假定字符串rawurl没有#fragment后缀. (Web浏览器在将URL发送到Web服务器之前去除#fragment.)

func (*URL) EscapedPath 1.5

func (u *URL) EscapedPath() string

EscapedPath返回u.Path的转义形式. 通常,任何路径都有多种可能的转义形式. EscapedPath是对u.Path的有效转义时,返回u.RawPath. 否则,EscapedPath会忽略u.RawPath并自行计算一个转义形式. String和RequestURI方法使用EscapedPath构造其结果. 通常,代码应调用EscapedPath而不是直接读取u.RawPath.

Example

/path%20with%20spaces

func (*URL) Hostname 1.8

func (u *URL) Hostname() string

主机名返回u.Host,剥离任何有效的端口号(如果存在).

如果将结果括在方括号中(如原义IPv6地址一样),则会从结果中删除方括号.

Example

example.org
2001:0db8:85a3:0000:0000:8a2e:0370:7334

func (*URL) IsAbs

func (u *URL) IsAbs() bool

IsAbs报告URL是否是绝对的. 绝对表示它具有非空方案.

Example

false
true

func (*URL) MarshalBinary 1.8

func (u *URL) MarshalBinary() (text []byte, err error)

Example

https://example.org

func (*URL) Parse

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

解析在接收者的上下文中解析URL. 提供的URL可以是相对的或绝对的. 解析失败时,解析返回nil,否则返回err,否则其返回值与ResolveReference相同.

Example

https://example.org/foo

func (*URL) Port 1.8

func (u *URL) Port() string

Port返回u.Host的端口部分,不包含前导冒号.

如果u.Host不包含有效的数字端口,则Port返回一个空字符串.

Example

8080

func (*URL) Query

func (u *URL) Query() Values

查询解析RawQuery并返回相应的值. 它默默地丢弃格式错误的值对. 要检查错误,请使用ParseQuery.

Example

[1 2]

3

func (*URL) RequestURI

func (u *URL) RequestURI() string

RequestURI返回用于u的HTTP请求中的编码路径查询或不透明查询字符串.

Example

/path?foo=bar

func (*URL) ResolveReference

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

ResolveReference根据RFC 3986第5.2节,从绝对基本URI u解析对绝对URI的URI引用. URI引用可以是相对的也可以是绝对的. 即使返回的URL与基本或引用相同,ResolveReference始终会返回一个新的URL实例. 如果ref是绝对URL,则ResolveReference会忽略base并返回ref的副本.

Example

http://example.com/search?q=dotnet

func (*URL) String

func (u *URL) String() string

字符串将URL重组为有效的URL字符串. 结果的一般形式是以下之一:

scheme:opaque?query#fragment
scheme://userinfo@host/path?query#fragment

如果u.Opaque不为空,则String使用第一种形式; 否则,它使用第二种形式. 主机中的任何非ASCII字符都将转义. 要获取路径,String使用u.EscapedPath().

在第二种形式中,以下规则适用:

- if u.Scheme is empty, scheme: is omitted.
- if u.User is nil, userinfo@ is omitted.
- if u.Host is empty, host/ is omitted.
- if u.Scheme and u.Host are empty and u.User is nil,
   the entire scheme://userinfo@host/ is omitted.
- if u.Host is non-empty and u.Path begins with a /,
   the form host/path does not add its own /.
- if u.RawQuery is empty, ?query is omitted.
- if u.Fragment is empty, #fragment is omitted.

Example

https://me:pass@example.com/foo/bar?x=1&y=2#anchor
https:opaque?x=1&y=2#anchor

func (*URL) UnmarshalBinary 1.8

func (u *URL) UnmarshalBinary(text []byte) error

Example

https://example.org/foo

type Userinfo

Userinfo类型是URL的用户名和密码详细信息的不变封装. 确保现有的Userinfo值具有用户名集(如RFC 2396所允许,可能为空),还可以选择设置密码.

type Userinfo struct {
    // contains filtered or unexported fields
}

func User

func User(username string) *Userinfo

用户返回包含提供的用户名且未设置密码的Userinfo.

func UserPassword

func UserPassword(username, password string) *Userinfo

UserPassword返回包含提供的用户名和密码的Userinfo.

此功能只能与旧版网站一起使用. RFC 2396警告说,"不建议使用这种方式来解释Userinfo,因为在几乎每种使用情况下,都已证明以明文(例如URI)形式传递身份验证信息存在安全隐患."

func (*Userinfo) Password

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

如果设置了密码,则返回密码,以及是否设置密码.

func (*Userinfo) String

func (u *Userinfo) String() string

字符串以" username [:password]"的标准格式返回编码的userinfo信息.

func (*Userinfo) Username

func (u *Userinfo) Username() string

用户名返回用户名.

type Values

值将字符串键映射到值列表. 它通常用于查询参数和表单值. 与http.Header映射不同,Values映射中的键区分大小写.

type Values map[string][]string

Example

Ava
Jess
[Jess Sarah Zoe]

func ParseQuery

func ParseQuery(query string) (Values, error)

ParseQuery解析URL编码的查询字符串,并返回一个映射,列出为每个键指定的值. ParseQuery总是返回一个非零的映射,其中包含找到的所有有效查询参数. err描述遇到的第一个解码错误(如果有).

查询应该是键和值设置的列表,并用&或分号分隔. 没有等号的设置被解释为设置为空值的键.

Example

{"x":["1"], "y":["2", "3"], "z":[""]}

func (Values) Add

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

添加将值添加到键. 它附加到与键关联的任何现有值.

func (Values) Del

func (v Values) Del(key string)

Del删除与键关联的值.

func (Values) Encode

func (v Values) Encode() string

编码将值编码为按键排序的" URL编码"形式(" bar = baz&foo = quux").

func (Values) Get

func (v Values) Get(key string) string

Get获取与给定键关联的第一个值. 如果没有与键关联的值,则Get返回空字符串. 要访问多个值,请直接使用地图.

func (Values) Set

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

Set将键设置为值. 它替换任何现有值.

by  ICOPY.SITE