?
本文檔使用
php中文網(wǎng)手冊 發(fā)布
import "net/url"
概述
索引
示例
url 包解析 URL 并實現(xiàn)查詢轉義。
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
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)
ParseQuery URL URL.Hostname URL.RequestURI URL.ResolveReference URL (Roundtrip) Values
url.go
func PathEscape(s string) string
PathEscape 會將字符串轉義出來,以便將其安全地放置在 URL 路徑段中。
func PathUnescape(s string) (string, error)
PathUnescape 執(zhí)行 PathEscape 的逆轉換,將 %AB 轉換為字節(jié) 0xAB 。如果任何 % 之后沒有兩個十六進制數(shù)字,它將返回一個錯誤。
PathUnescape 與 QueryUnescape 相同,只是它不會將'+'改為''(空格)。
func QueryEscape(s string) string
QueryEscape 將字符串轉義,以便它可以安全地放置在 URL 查詢中。
func QueryUnescape(s string) (string, error)
QueryUnescape 執(zhí)行 QueryEscape 的逆轉換,將 %AB 轉換為字節(jié) 0xAB ,將'+'轉換為''(空格)。如果任何 % 之后沒有兩個十六進制數(shù)字,它將返回一個錯誤。
錯誤報告錯誤以及導致錯誤的操作和 URL 。
type Error struct { Op string URL string Err error}
func (e *Error) Error() string
func (e *Error) Temporary() bool
func (e *Error) Timeout() bool
type EscapeError string
func (e EscapeError) Error() string
type InvalidHostError string
func (e InvalidHostError) Error() string
URL 代表解析的 URL (技術上說,是一個 URI 引用)。
代表的一般形式是:
[scheme:][//[userinfo@]host][/]path[?query][#fragment]
在方案之后不以斜線開頭的 URL 被解釋為:
scheme:opaque[?query][#fragment]
請注意,路徑字段以解碼形式存儲: /%47%6f%2f 變?yōu)?/ Go / 。結果是,無法確定路徑中的哪些斜杠是原始 URL 中的斜杠,哪些是 %2f 。這種區(qū)分很少重要,但是如果是這樣,代碼不能直接使用 Path 。Parse 函數(shù)在它返回的 URL 中設置 Path 和 RawPath ,而 URL 的 String 方法通過調用 EscapedPath 方法使用 RawPath(如果它是 Path 的有效編碼)。
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) ForceQuery bool // append a query ('?') even if RawQuery is empty RawQuery string // encoded query values, without '?' Fragment string // fragment for references, without '#'}
package mainimport ("fmt""log""net/url")func main() { u, err := url.Parse("http://bing.com/search?q=dotnet")if err != nil { log.Fatal(err)} u.Scheme = "https" u.Host = "google.com" q := u.Query() q.Set("q", "golang") u.RawQuery = q.Encode() fmt.Println(u)}
package mainimport ("fmt""log""net/url")func main() {// Parse + String preserve the original encoding. u, err := url.Parse("https://example.com/foo%2fbar")if err != nil { log.Fatal(err)} fmt.Println(u.Path) fmt.Println(u.RawPath) fmt.Println(u.String())}
func Parse(rawurl string) (*URL, error)
解析將 rawurl 解析為 URL 結構。Rawurl 可能是相對的或絕對的。
func ParseRequestURI(rawurl string) (*URL, error)
ParseRequestURI 將 rawurl 解析為 URL 結構。它假定 rawurl 是在 HTTP 請求中收到的,所以 rawurl 只被解釋為絕對 URI 或絕對路徑。字符串 rawurl 假定沒有 #fragment 后綴。(在將 URL 發(fā)送到 Web 服務器之前,Web 瀏覽器會去除 #fragment 。)
func (u *URL) EscapedPath() string
EscapedPath 返回 u.Path 的轉義形式。一般來說,任何路徑都有多種可能的轉義形式。EscapedPath 在 u.Path 有效轉義時返回 u.RawPath 。否則,EscapedPath 將忽略 u.RawPath 并自行計算轉義表單。 String 和 RequestURI 方法使用 EscapedPath 來構造它們的結果。通常,代碼應該調用 EscapedPath ,而不是直接讀取 u.RawPath 。
func (u *URL) Hostname() string
主機名返回 u.Host ,沒有任何端口號。
如果主機是具有端口號的 IPv6 文本,則主機名將返回不帶方括號的 IPv6 文字。IPv6 文字可能包含區(qū)域標識符。
package mainimport ("fmt""log""net/url")func main() { u, err := url.Parse("https://example.org:8000/path")if err != nil { log.Fatal(err)} fmt.Println(u.Hostname()) u, err = url.Parse("https://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:17000")if err != nil { log.Fatal(err)} fmt.Println(u.Hostname())}
func (u *URL) IsAbs() bool
IsAbs 報告 URL 是否是絕對的。絕對意味著它有一個非空的方案。
func (u *URL) MarshalBinary() (text []byte, err error)
func (u *URL) Parse(ref string) (*URL, error)
解析解析接收器上下文中的 URL 。提供的 URL 可能是相對的或絕對的。解析返回 nil ,錯誤解析失敗,否則其返回值與 ResolveReference 相同。
func (u *URL) Port() string
Port 返回 u.Host 的端口部分,不帶前導冒號。如果 u.Host 不包含端口,則 Port 返回空字符串。
func (u *URL) Query() Values
查詢解析 RawQuery 并返回相應的值。它默默丟棄畸形值對。要檢查錯誤使用 ParseQuery 。
func (u *URL) RequestURI() string
RequestURI 返回在 u 的 HTTP 請求中使用的編碼 path?query or opaque?query 字符串。
package mainimport ("fmt""log""net/url")func main() { u, err := url.Parse("https://example.org/path?foo=bar")if err != nil { log.Fatal(err)} fmt.Println(u.RequestURI())}
func (u *URL) ResolveReference(ref *URL) *URL
根據(jù) RFC 3986 第5.2節(jié),ResolveReference 將絕對基 URI 的絕對 URI 解析為 URI 引用。URI 參考可以是相對的或絕對的。即使返回的 URL 與基本或引用完全相同,ResolveReference 也會始終返回新的 URL 實例。如果 ref 是絕對 URL ,則 ResolveReference 將忽略基礎并返回 ref 的副本。
package mainimport ("fmt""log""net/url")func main() { u, err := url.Parse("../../..//search?q=dotnet")if err != nil { log.Fatal(err)} base, err := url.Parse("http://example.com/directory/")if err != nil { log.Fatal(err)} fmt.Println(base.ResolveReference(u))}
func (u *URL) String() string
字符串將 URL 重組為一個有效的 URL 字符串。結果的一般形式是以下之一:
scheme:opaque?query#fragment scheme://userinfo@host/path?query#fragment
如果 u.Opaque 不為空,則 String 使用第一種形式; 否則它使用第二種形式。要獲取路徑,String 使用 u.EscapedPath() 。
在第二種形式中,適用下列規(guī)則:
- 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.
func (u *URL) UnmarshalBinary(text []byte) error
Userinfo 類型是 URL 的用戶名和密碼詳細信息的不可變封裝?,F(xiàn)有的用戶信息值保證具有用戶名設置(可能為空,如 RFC 2396 所允許的),并可選擇密碼。
type Userinfo struct { // contains filtered or unexported fields}
func User(username string) *Userinfo
用戶返回包含提供的用戶名和用戶密碼的用戶信息。
func UserPassword(username, password string) *Userinfo
UserPassword 返回包含提供的用戶名和密碼的用戶信息。
此功能只應與傳統(tǒng)網(wǎng)站一起使用。RFC 2396 警告說以這種方式解釋用戶信息“是不推薦的,因為以明文形式傳遞驗證信息(例如 URI )已被證明在幾乎所有已被使用的情況下都具有安全風險?!?/p>
func (u *Userinfo) Password() (string, bool)
密碼在設置時返回密碼,以及是否設置。
func (u *Userinfo) String() string
字符串以 “username:password” 的標準格式返回編碼后的 userinfo 信息。
func (u *Userinfo) Username() string
Username 返回用戶名。
值將字符串鍵映射到值列表。它通常用于查詢參數(shù)和表單值。與 http.Header 映射不同,Values 映射中的鍵是區(qū)分大小寫的。
type Values map[string][]string
package mainimport ("fmt""net/url")func main() { v := url.Values{} v.Set("name", "Ava") v.Add("friend", "Jess") v.Add("friend", "Sarah") v.Add("friend", "Zoe")// v.Encode() == "name=Ava&friend=Jess&friend=Sarah&friend=Zoe" fmt.Println(v.Get("name")) fmt.Println(v.Get("friend")) fmt.Println(v["friend"])}
func ParseQuery(query string) (Values, error)
ParseQuery 分析 URL 編碼的查詢字符串并返回一個映射,列出為每個鍵指定的值。ParseQuery 總是返回一個包含所有找到的有效查詢參數(shù)的非零映射;err 描述遇到的第一個解碼錯誤,如果有的話。
預計查詢是由&符號或分號分隔的鍵=值設置列表。沒有等號的設置被解釋為設置為空值的鍵。
代碼:
m, err := url.ParseQuery(`x=1&y=2&y=3;z`)if err != nil { log.Fatal(err)}fmt.Println(toJSON(m))
輸出:
{"x":["1"], "y":["2", "3"], "z":[""]}
func (v Values) Add(key, value string)
添加將值添加到鍵。它附加到與鍵相關的任何現(xiàn)有值。
func (v Values) Del(key string)
Del 刪除與鍵關聯(lián)的值。
func (v Values) Encode() string
編碼將這些值編碼為按鍵排序的“URL編碼”形式("bar=baz&foo=quux")。
func (v Values) Get(key string) string
獲取與給定鍵相關的第一個值。如果沒有與該鍵關聯(lián)的值,則 Get 返回空字符串。要訪問多個值,請直接使用地圖。
func (v Values) Set(key, value string)
Set 將鍵設置為值。它取代了現(xiàn)有的任何值。