package url
import "net/url"
url 包解析了 URL 并實(shí)現(xiàn)了查詢的轉(zhuǎn)碼,參見 RFC 3986厕诡。
Index
func QueryEscape(s string) string
func QueryUnescape(s string) (string, error)
-
type Error
- func (e *Error) Error() string
-
type EscapeError
- func (e EscapeError) Error() string
-
type URL
- func Parse (rawurl string) (url *URL, err error)
- func ParseRequestURI (rawurl string) (url *URL, err error)
- func (u *URL) IsAbs() bool
- func (u *URL) Query() Values
- func (u *URL) RequestURI() string
- func (u *URL) String() string
- func (u URL) Parse(ref string) (URL, error)
- func (u *URL) ResolveReference(ref *URL) *URL
-
type Userinfo
- func User(username string) *Userinfo
- func UserPassword(username, password string) *Userinfo
- func (u *Userinfo) Username() string
- func (u *Userinfo) Password() (string, bool)
- func (u *Userinfo) String() string
-
type Values
- func ParseQuery(query string) (m Values, err error)
- func (v Values) Get(key string) string
- func (v Values) Set(key, value string)
- func (v Values) Add(key, value string)
- func (v Values) Del(key string)
- func (v Values) Encode() string
URL
Values
func QueryEscape
func QueryEscape(s string) string
QueryEscape 函數(shù)對 s 進(jìn)行轉(zhuǎn)碼使之可以安全的用在 URL 查詢里。
func QueryUnescape
func QueryUnescape(s string) (string, error)
QueryUnescape 函數(shù)用于將QueryEscape轉(zhuǎn)碼的字符串還原肠虽。它會把%AB改為字節(jié)0xAB醉者,將'+'改為''。如果有某個%后面未跟兩個十六進(jìn)制的數(shù)字窥岩,本函數(shù)會返回錯誤甲献。
type Error
type Error struct {
Op string
URL string
Err error
}
Error 會報(bào)告一個錯誤,以及該錯誤發(fā)生的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 // 編碼后的不透明數(shù)據(jù)
User *Userinfo // 用戶名和密碼信息
Host string // host 或 host: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/呻疹。這導(dǎo)致我們無法確定 Path 字段中的斜線是來自原始 URL 還是解碼前的 %2f吃引。除非一個客戶端必須使用其他程序/函數(shù)來解析原始 URL 或者重構(gòu)原始 URL,這個區(qū)別并不重要刽锤。此時镊尺,HTTP 服務(wù)端可以查詢 req.RequestURI,而 HTTP 客戶端可以使用 URL {Host: "example.com", Opaque: "http://example.com/Go%2f"} 代替 {Host: "example.com", Path: "/Go/"}并思。
func Parse
func Parse(rawurl string) (url *URL, err error)
Parse 函數(shù)解析 rawurl 為一個 URL 結(jié)構(gòu)體庐氮,rawurl 可以是絕對地址,也可以是相對地址宋彼。
func ParseRequestURI
func ParseRequestURI(rawurl string) (url *URL, err error)
ParseRequestURI 函數(shù)解析 rawurl 為一個 URL 結(jié)構(gòu)體弄砍,本函數(shù)會假設(shè) rawurl 是在一個 HTTP 請求里仙畦,因此會假設(shè)該參數(shù)是一個絕對 URL 或者絕對路徑,并會假設(shè)該 URL 沒有 #fragment 后綴音婶。(網(wǎng)頁瀏覽器會在去掉該后綴才將網(wǎng)址發(fā)送到網(wǎng)頁瀏覽器)慨畸。
func (*URL) IsAbs
func (u *URL) IsAbs() bool
函數(shù)在 URL 是絕對 URL 時才返回真。
func (*URL) Query
func (u *URL) Query() Values
Query 方法解析 RawQuery 字段并返回表示的 Values 類型鍵值對桃熄。
func (*URL) RequestURI
func (u *URL) RequestURI() string
RequestURI 方法返回編碼好的 path?query 或 opaque?query 字符串先口,用在 HTTP 請求里。
func (*URL) String
func (u *URL) String() string
String 將 URL 重構(gòu)為一個合法 URL 字符串瞳收。
func (*URL) Parse
func (u *URL) Parse(ref string) (*URL, error)
Parse 方法以 u 為上下文來解析一個 URL碉京,ref 可以是絕對或相對 URL。
本方法解析失敗會返回 nil, err; 否則返回結(jié)果和 ResolveReference 一致螟深。
func (*URL) ResolveReference
func (u *URL) ResolveReference (ref *URL) *URL
本方法根據(jù)一個絕對 URI 將一個 URL 補(bǔ)全為一個 絕對URI谐宙。參數(shù) ref 可以是絕對 URI 或者相對 URI。ResolveReference 總是返回一個新的 URL 實(shí)例界弧,即使該實(shí)例和 u 或者 ref 完全一樣凡蜻。如果 ref 是絕對 URI,本方法會忽略參照 URI 并返回 ref 的一個拷貝垢箕。
type Userinfo
type Userinfo struct {
// 內(nèi)含隱藏或非導(dǎo)出字段
}
Userinfo 類型是一個 URL 的用戶名和細(xì)節(jié)的一個不可修改的封裝划栓。一個真實(shí)存在的 Userinfo 值必須保證有用戶名以及一個可選的密碼。
func User
func User(username string) *Userinfo
User 函數(shù)返回一個用戶名設(shè)置為 username 的不設(shè)置密碼的 *Userinfo条获。
func UserPassword
func UserPassword(username, password string) *Userinfo
UserPassword 函數(shù)返回一個用戶名設(shè)置為 username忠荞、密碼設(shè)置為 password 的 *Userinfo。
func (*Userinfo) Username
func (u *Userinfo) Username() string
Username 方法返回用戶名帅掘。
func (*Userinfo) Password
func (u *Userinfo) Password() (string, bool)
如果設(shè)置了密碼返回密碼和真委煤,否則會返回假。
func (*Userinfo) String
func (u *Userinfo) String() string
String 方法返回編碼后的用戶信息修档,格式為 "username[:password]"碧绞。
type Values
type Value map[string][]string
Values 將建映射到值的列表。它一般用于查詢的參數(shù)和表單的屬性吱窝。不同于 http.Header 這個字典類型讥邻,Values 的鍵是大小寫敏感的。
func ParseQuery
func ParseQuery(query string) (m Values, err error)
ParseQuery 函數(shù)解析一個 URL 編碼的查詢字符串院峡,并返回可以表示該查詢的 Values 類型的字典兴使。本函數(shù)總是返回一個包含了所有合法查詢參數(shù)的非 nil 字典,err 用來描述解碼時遇到的(如果有)第一個錯誤撕予。
func (Values) Get
func (v Values) Get(key string) string
Get 會獲取 key 對應(yīng)的值集的第一個值鲫惶。如果沒有對應(yīng) key 的值集會返回空字符串蜈首。獲取值集請直接用 map实抡。
func (Values) Set
func (v Values) Set(key, value string)
Set 方法將 key 對應(yīng)的值集設(shè)為只有 value欠母,它會替換掉已有的值集。
func (Values) Add
func (v Values) Add(key, value string)
Add 將 value 添加到 key 關(guān)聯(lián)的值集里面原有的值后面吆寨。
func (Values) Del
func (v Values) Del (key string)
Del 刪除 key 關(guān)聯(lián)的值集赏淌。
func (Values) Encode
func (v Values) Encode() string
Encode 方法將 v 編碼為 url 編碼格式("bar=baz&foo=quux"),編碼時會以鍵進(jìn)行排序啄清。