成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 標(biāo)準(zhǔn)庫 net/url 學(xué)習(xí)筆記

開發(fā) 后端
本文是一篇學(xué)習(xí)筆記,記錄了作者學(xué)習(xí) go 語言標(biāo)準(zhǔn)庫 net/url 庫的過程。

[[417414]]

 本文是一篇學(xué)習(xí)筆記,記錄了作者學(xué)習(xí) go 語言標(biāo)準(zhǔn)庫 net/url 庫的過程。

參考:https://studygolang.com/pkgdoc

導(dǎo)入方式: 

  1. import "net/url" 

url 包解析 URL 并實(shí)現(xiàn)了查詢的逸碼,參見 RFC 3986。

func PathEscape

  1. func PathEscape(s string) string 

PathEscape 會(huì)將字符串轉(zhuǎn)義出來,以便將其安全地放置在 URL 路徑段中。

func PathUnescape 

  1. func PathUnescape(s string) (string, error 

PathUnescape 執(zhí)行 PathEscape 的逆轉(zhuǎn)換,將 %AB 轉(zhuǎn)換為字節(jié) 0xAB 。如果任何 % 之后沒有兩個(gè)十六進(jìn)制數(shù)字,它將返回一個(gè)錯(cuò)誤。

PathUnescape 與 QueryUnescape 相同,只是它不會(huì)將'+'改為''(空格)。

func QueryEscape 

  1. func QueryEscape(s string) string 

QueryEscape 函數(shù)對(duì) s 進(jìn)行轉(zhuǎn)碼使之可以安全的用在 URL 查詢里。

func QueryUnescape 

  1. func QueryUnescape(s string) (string, error) 

QueryUnescape 函數(shù)用于將 QueryEscape 轉(zhuǎn)碼的字符串還原。它會(huì)把%AB 改為字節(jié) 0xAB,將'+'改為' '。如果有某個(gè)%后面未跟兩個(gè)十六進(jìn)制數(shù)字,本函數(shù)會(huì)返回錯(cuò)誤。

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "encoding/base64"  
  5.     "net/url"  
  6.     "crypto/rand"  
  7.     "io"  
  8.     "log"  
  9.  
  10. //sessionId 函數(shù)用來生成一個(gè) session ID,即 session 的唯一標(biāo)識(shí)符  
  11. func sessionId() string {  
  12.     b :make([]byte, 32)  
  13.     //ReadFull 從 rand.Reader 精確地讀取 len(b) 字節(jié)數(shù)據(jù)填充進(jìn) b  
  14.     //rand.Reader 是一個(gè)全局、共享的密碼用強(qiáng)隨機(jī)數(shù)生成器  
  15.     if _, err :io.ReadFull(rand.Reader, b); err != nil {   
  16.         return ""  
  17.     }  
  18.     fmt.Println(b) //[238 246 235 166 48 196 157 143 123 140 241 200 213 113 247 168 219 132 208 163 223 24 72 162 114 30 175 205 176 117 139 118] 
  19.      return base64.URLEncoding.EncodeToString(b)//將生成的隨機(jī)數(shù) b 編碼后返回字符串,該值則作為 session ID 
  20.   
  21. func main() {   
  22.     sessionId :sessionId()   
  23.     fmt.Println(sessionId) //7vbrpjDEnY97jPHI1XH3qNuE0KPfGEiich6vzbB1i3Y 
  24.     encodedSessionId :url.QueryEscape(sessionId) //對(duì) sessionId 進(jìn)行轉(zhuǎn)碼使之可以安全的用在 URL 查詢里  
  25.     fmt.Println(encodedSessionId) //7vbrpjDEnY97jPHI1XH3qNuE0KPfGEiich6vzbB1i3Y%3D  
  26.     decodedSessionId, err :url.QueryUnescape(encodedSessionId) //將 QueryEscape 轉(zhuǎn)碼的字符串還原  
  27.     if err != nil {  
  28.         log.Fatal(err)  
  29.     }  
  30.     fmt.Println(decodedSessionId) //7vbrpjDEnY97jPHI1XH3qNuE0KPfGEiich6vzbB1i3Y 

type URL 

  1. type URL struct {  
  2.     Scheme   string    //具體指訪問服務(wù)器上的資源使用的哪種協(xié)議  
  3.     Opaque   string    // 編碼后的不透明數(shù)據(jù)  
  4.     User     *Userinfo // 用戶名和密碼信息,有些協(xié)議需要傳入明文用戶名和密碼來獲取資源,比如 FTP  
  5.     Host     string    // host 或 host:port,服務(wù)器地址,可以是 IP 地址,也可以是域名信息  
  6.     Path     string  //路徑,使用"/"分隔  
  7.     RawQuery string // 編碼后的查詢字符串,沒有'?'  
  8.     Fragment string // 引用的片段(文檔位置),沒有'#'  

URL 類型代表一個(gè)解析后的 URL(或者說,一個(gè) URL 參照)。URL 基本格式如下: 

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

scheme 后不是冒號(hào)加雙斜線的 URL 被解釋為如下格式: 

  1. scheme:opaque[?query][#fragment] 

注意路徑字段是以解碼后的格式保存的,如/%47%6f%2f 會(huì)變成/Go/。這導(dǎo)致我們無法確定 Path 字段中的斜線是來自原始 URL 還是解碼前的%2f。除非一個(gè)客戶端必須使用其他程序/函數(shù)來解析原始 URL 或者重構(gòu)原始 URL,這個(gè)區(qū)別并不重要。此時(shí),HTTP 服務(wù)端可以查詢 req.RequestURI,而 HTTP 客戶端可以使用 URL{Host: "example.com", Opaque: "//example.com/Go%2f"}代替{Host: "example.com", Path: "/Go/"}。

func Parse 

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

Parse 函數(shù)解析 rawurl 為一個(gè) URL 結(jié)構(gòu)體,rawurl 可以是絕對(duì)地址,也可以是相對(duì)地址。

func ParseRequestURI 

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

ParseRequestURI 函數(shù)解析 rawurl 為一個(gè) URL 結(jié)構(gòu)體,本函數(shù)會(huì)假設(shè) rawurl 是在一個(gè) HTTP 請求里,因此會(huì)假設(shè)該參數(shù)是一個(gè)絕對(duì) URL 或者絕對(duì)路徑,并會(huì)假設(shè)該 URL 沒有#fragment 后綴。(網(wǎng)頁瀏覽器會(huì)在去掉該后綴后才將網(wǎng)址發(fā)送到網(wǎng)頁服務(wù)器)

func (*URL) IsAbs

  1. func (u *URL) IsAbs() bool 

函數(shù)在 URL 是絕對(duì) URL 時(shí)才返回真。

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.  
  6. func main() {   
  7.     u :url.URL{Host: "example.com", Path: "foo"}  
  8.     fmt.Println(u.IsAbs()) //false  
  9.     u.Scheme = "http"  
  10.     fmt.Println(u.IsAbs()) //true  

func (*URL) Query 

  1. func (u *URL) Query() Values 

Query 方法解析 RawQuery 字段并返回其表示的 Values 類型鍵值對(duì)。

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.  
  6. func main() {   
  7.     u := &url.URL{  
  8.         Scheme:   "https",  
  9.         User:     url.UserPassword("me", "pass"),  
  10.         Host:     "example.com",  
  11.         Path:     "foo/bar",  
  12.         RawQuery: "x=1&y=2",  
  13.         Fragment: "anchor",  
  14.     }  
  15.     fmt.Println(u.Query()) //map[x:[1] y:[2]]  

func (*URL) RequestURI 

  1. func (u *URL) RequestURI() string 

RequestURI 方法返回編碼好的 path?query 或 opaque?query 字符串,用在 HTTP 請求里。 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.     "log"  
  6.  
  7. func main() {   
  8.     u, err :url.Parse("https://example.org/path?foo=bar")  
  9.     if err != nil {  
  10.         log.Fatal(err)  
  11.     }  
  12.     fmt.Println(u.RequestURI()) ///path?foo=bar  

func (*URL) String 

  1. func (u *URL) String() string 

String 將 URL 重構(gòu)為一個(gè)合法 URL 字符串。

字符串將 URL 重組為一個(gè)有效的 URL 字符串。結(jié)果的一般形式是以下之一: 

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

如果 u.Opaque 不為空,則 String 使用第一種形式;否則它使用第二種形式。要獲取路徑,String 使用 u.EscapedPath() 。

在第二種形式中,適用下列規(guī)則: 

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

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.  
  6. func main() {   
  7.     u := &url.URL{  
  8.         Scheme:   "https",  
  9.         User:     url.UserPassword("me", "pass"),  
  10.         Host:     "example.com",  
  11.         Path:     "foo/bar",  
  12.         RawQuery: "x=1&y=2",  
  13.         Fragment: "anchor",  
  14.     }  
  15.     //這是第一種形式  
  16.     fmt.Println(u.String()) //https://me:pass@example.com/foo/bar?x=1&y=2#anchor  
  17.     u.Opaque = "opaque"  
  18.     //這是第二種形式  
  19.     fmt.Println(u.String()) //https:opaque?x=1&y=2#anchor  

func (*URL) EscapedPath 

  1. func (u *URL) EscapedPath() string 

EscapedPath 返回 u.Path 的轉(zhuǎn)義形式。一般來說,任何路徑都有多種可能的轉(zhuǎn)義形式。EscapedPath 在 u.Path 有效轉(zhuǎn)義時(shí)返回 u.RawPath 。否則,EscapedPath 將忽略 u.RawPath 并自行計(jì)算轉(zhuǎn)義表單。String 和 RequestURI 方法使用 EscapedPath 來構(gòu)造它們的結(jié)果。通常,代碼應(yīng)該調(diào)用 EscapedPath ,而不是直接讀取 u.RawPath 。

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.     "log"  
  6.  
  7. func main() {   
  8.     u, err :url.Parse("http://example.com/path with spaces")  
  9.     if err != nil {  
  10.         log.Fatal(err)  
  11.     }  
  12.     fmt.Println(u.EscapedPath()) ///path%20with%20spaces  

func (*URL) Hostname 

  1. func (u *URL) Hostname() string 

主機(jī)名返回 u.Host ,沒有任何端口號(hào)。

如果主機(jī)是具有端口號(hào)的 IPv6 文本,則主機(jī)名將返回不帶方括號(hào)的 IPv6 文字。IPv6 文字可能包含區(qū)域標(biāo)識(shí)符。

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.     "log"  
  6.  
  7. func main() {   
  8.     u, err :url.Parse("https://example.org:8000/path")//IPV4  
  9.     if err != nil {  
  10.         log.Fatal(err)  
  11.     }  
  12.     fmt.Println(u.Hostname()) //example.org  
  13.     u, err = url.Parse("https://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:17000") //IPV6  
  14.     if err != nil {  
  15.         log.Fatal(err)  
  16.     }  
  17.     fmt.Println(u.Hostname())//2001:0db8:85a3:0000:0000:8a2e:0370:7334  

func (*URL) Port 

  1. func (u *URL) Port() string 

Port 返回 u.Host 的端口部分,不帶前導(dǎo)冒號(hào)。如果 u.Host 不包含端口,則 Port 返回空字符串。

func (*URL) Parse 

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

Parse 方法以 u 為上下文來解析一個(gè) URL,ref 可以是絕對(duì)或相對(duì) URL。

本方法解析失敗會(huì)返回 nil, err;否則返回結(jié)果和 ResolveReference 一致。

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.     "log"  
  6.  
  7. func main() {   
  8.     base, err :url.Parse("http://example.com/directory/")  
  9.     if err != nil {  
  10.         log.Fatal(err)  
  11.     }  
  12.     fmt.Println(base)  
  13.     result, err :base.Parse("./search?q=dotnet")  
  14.     if err != nil {  
  15.         log.Fatal(err) 
  16.     }  
  17.     fmt.Println(result)  

返回: 

  1. bogon:~ user$ go run testGo.go   
  2. http://example.com/directory/  
  3. http://example.com/directory/search?q=dotnet 

func (*URL) ResolveReference 

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

本方法根據(jù)一個(gè)絕對(duì) URI 將一個(gè) URI 補(bǔ)全為一個(gè)絕對(duì) URI,參見 RFC 3986 節(jié) 5.2。參數(shù) ref 可以是絕對(duì) URI 或者相對(duì) URI。ResolveReference 總是返回一個(gè)新的 URL 實(shí)例,即使該實(shí)例和 u 或者 ref 完全一樣。如果 ref 是絕對(duì) URI,本方法會(huì)忽略參照 URI 并返回 ref 的一個(gè)拷貝。

舉例:

當(dāng) ref 是相對(duì)路徑,則其將會(huì)相對(duì)于 u 來得到其的絕對(duì)路徑: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.     "log"  
  6.  
  7. func main() {   
  8.   //該相對(duì)路徑的意思是  
  9.     u, err :url.Parse("../../..//search?q=dotnet")//相對(duì)路徑的不同會(huì)影響返回的結(jié)果  
  10.     if err != nil {  
  11.         log.Fatal(err) 
  12.      }  
  13.     fmt.Println(u) 
  14.      base, err :url.Parse("http://example.com/directory/")  
  15.     if err != nil {  
  16.         log.Fatal(err)  
  17.     }  
  18.     fmt.Println(base)  
  19.     fmt.Println(base.ResolveReference(u))  

返回: 

  1. bogon:~ user$ go run testGo.go   
  2. ../../..//search?q=dotnet  
  3. http://example.com/directory/  
  4. http://example.com/search?q=dotnet 

如果相對(duì)路徑為。./..//search?q=dotnet,返回結(jié)果是相同的,即 http://example.com/search?q=dotnet

但是如果相對(duì)路徑為。.//search?q=dotnet,將返回 http://example.com//search?q=dotnet,這并不是我們想要的結(jié)果。如果想要相對(duì)于 directory 目錄,則相對(duì)路徑寫成。/search?q=dotnet

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

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

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.     "log"  
  6.     "reflect"  
  7.  
  8. func main() {   
  9.     u, _ :url.Parse("https://example.org")  
  10.     b, err :u.MarshalBinary() //將其轉(zhuǎn)成二進(jìn)制  
  11.     if err != nil {  
  12.         log.Fatal(err)  
  13.     }  
  14.     fmt.Println(reflect.TypeOf(b)) //[]uint8  
  15.     fmt.Println(b) //[104 116 116 112 115 58 47 47 101 120 97 109 112 108 101 46 111 114 103]  
  16.     fmt.Printf("%s\n", b) //https://example.org  

func (*URL) UnmarshalBinary 

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

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.     "log"  
  6.     "reflect"  
  7.  
  8. func main() {   
  9.     u := &url.URL{}  
  10.     //將其從二進(jìn)制轉(zhuǎn)成 url.URL 類型  
  11.     err :u.UnmarshalBinary([]byte("https://example.org:8000/foo"))  
  12.     if err != nil {  
  13.         log.Fatal(err)  
  14.     }  
  15.     fmt.Println(reflect.TypeOf(u)) //*url.URL  
  16.     fmt.Println(u) //https://example.org:8000/foo  
  17.     fmt.Println(u.Hostname()) //example.org  
  18.     fmt.Println(u.Port()) //8000 

type Userinfo 

  1. type Userinfo struct {  
  2.     // 內(nèi)含隱藏或非導(dǎo)出字段  

Userinfo 類型是一個(gè) URL 的用戶名和密碼細(xì)節(jié)的一個(gè)不可修改的封裝。一個(gè)真實(shí)存在的 Userinfo 值必須保證有用戶名(但根據(jù) RFC 2396 可以是空字符串)以及一個(gè)可選的密碼。

func User

  1. func User(username string) *Userinfo 

User 函數(shù)返回一個(gè)用戶名設(shè)置為 username 的不設(shè)置密碼的* Userinfo。

func UserPassword 

  1. func UserPassword(username, password string) *Userinfo 

UserPassword 函數(shù)返回一個(gè)用戶名設(shè)置為 username、密碼設(shè)置為 password 的* Userinfo。

這個(gè)函數(shù)應(yīng)該只用于老式的站點(diǎn),因?yàn)轱L(fēng)險(xiǎn)很大,不建議使用,參見 RFC 2396。

func (*Userinfo) Username 

  1. func (u *Userinfo) Username() string  

Username 方法返回用戶名。

func (*Userinfo) Password 

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

如果設(shè)置了密碼返回密碼和真,否則會(huì)返回假。

func (*Userinfo) String 

  1. func (u *Userinfo) String() string 

String 方法返回編碼后的用戶信息,格式為"username[:password]"。

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.     "log"  
  6.  
  7. func main() {   
  8.     u := &url.URL{  
  9.         Scheme:   "https",  
  10.         User:     url.UserPassword("me", "pass"),  
  11.         Host:     "example.com",  
  12.         Path:     "foo/bar",  
  13.         RawQuery: "x=1&y=2",  
  14.         Fragment: "anchor",  
  15.     }  
  16.     fmt.Println(u.User.Username()) //me  
  17.     password, b :u.User.Password()  
  18.     if b == false{  
  19.         log.Fatal("can not get password")  
  20.     }  
  21.     fmt.Println(password) //pass  
  22.     fmt.Println(u.User.String()) //me:pass  

type Values 

  1. type Values map[string][]string 

Values 將建映射到值的列表。它一般用于查詢的參數(shù)和表單的屬性。不同于 http.Header 這個(gè)字典類型,Values 的鍵是大小寫敏感的。

func ParseQuery 

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

ParseQuery 函數(shù)解析一個(gè) URL 編碼的查詢字符串,并返回可以表示該查詢的 Values 類型的字典。本函數(shù)總是返回一個(gè)包含了所有合法查詢參數(shù)的非 nil 字典,err 用來描述解碼時(shí)遇到的(如果有)第一個(gè)錯(cuò)誤。

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.     "log"  
  6.  
  7. func main() {   
  8.     v, err :url.ParseQuery("friend=Jess&friend=Sarah&fruit=apple&name=Ava")  
  9.     if err != nil {  
  10.         log.Fatal(err)  
  11.     }  
  12.     fmt.Println(v) //map[friend:[Jess Sarah] fruit:[apple] name:[Ava]]  

func (Values) Get 

  1. func (v Values) Get(key string) string 

Get 會(huì)獲取 key 對(duì)應(yīng)的值集的第一個(gè)值。如果沒有對(duì)應(yīng) key 的值集會(huì)返回空字符串。獲取值集請直接用 map。

func (Values) Set 

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

Set 方法將 key 對(duì)應(yīng)的值集設(shè)為只有 value,它會(huì)替換掉已有的值集。

func (Values) Add 

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

Add 將 value 添加到 key 關(guān)聯(lián)的值集里原有的值的后面。

func (Values) Del 

  1. func (v Values) Del(key string) 

Del 刪除 key 關(guān)聯(lián)的值集。

func (Values) Encode 

  1. func (v Values) Encode() string 

Encode 方法將 v 編碼為 url 編碼格式 ("bar=baz&foo=quux"),編碼時(shí)會(huì)以鍵進(jìn)行排序。

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5. func main() {   
  6.     v :url.Values{}  
  7.     v.Set("name", "Ava")  
  8.     v.Add("friend", "Jess")  
  9.     v.Add("friend", "Sarah")  
  10.     v.Add("fruit", "apple")  
  11.     fmt.Println(v.Get("name"))  
  12.     fmt.Println(v.Get("friend"))  
  13.     fmt.Println(v["friend"])  
  14.     fmt.Println(v.Encode())  
  15.     v.Del("name")  
  16.     fmt.Println(v.Encode())  

返回: 

  1. bogon:~ user$ go run testGo.go   
  2. Ava  
  3. Jess  
  4. [Jess Sarah]  
  5. friend=Jess&friend=Sarah&fruit=apple&name=Ava  
  6. friend=Jess&friend=Sarah&fruit=apple 

 

責(zé)任編輯:龐桂玉 來源: 馬哥Linux運(yùn)維
相關(guān)推薦

2010-01-15 14:59:54

C++標(biāo)準(zhǔn)程序庫

2023-04-02 23:13:07

Go語言bufio

2009-10-21 14:52:30

綜合布線系統(tǒng)標(biāo)準(zhǔn)

2024-09-29 16:04:14

2023-09-27 08:26:48

Go標(biāo)準(zhǔn)庫函數(shù)

2021-12-10 15:22:26

Go Zip 文件

2009-10-16 11:21:54

VB.NET Decl

2009-10-13 14:29:49

VB.NET名字空間

2023-10-11 08:45:55

Go標(biāo)準(zhǔn)庫指標(biāo)

2009-08-11 10:21:54

ASP.NET構(gòu)建數(shù)據(jù)

2009-10-16 13:38:43

VB.NET Spli

2010-01-14 09:43:26

C++標(biāo)準(zhǔn)程序庫

2009-10-14 09:27:30

VB.NET編碼算法

2014-01-14 09:10:53

GoHTTP內(nèi)存泄漏

2023-12-04 08:46:40

Go標(biāo)準(zhǔn)庫

2009-10-26 10:31:20

linux庫

2021-10-18 10:53:26

Go 代碼技術(shù)

2023-11-01 08:41:24

Go標(biāo)準(zhǔn)庫http

2023-12-26 07:37:27

2009-10-13 14:38:15

.NET重寫URL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美激情精品久久久久久变态 | 国产精品一区免费 | 国产区精品视频 | 亚洲视频区 | 国产精品亚洲精品 | 香蕉视频91 | 久久久久久国产精品 | 日韩在线观看网站 | 国产福利91精品 | 国产激情偷乱视频一区二区三区 | 狠狠操电影 | 国产精品久久久久久久久久久久午夜片 | 国产一区在线免费 | 国产精品99久久久久久宅男 | 久久一 | 欧美精品在线播放 | 一区二区三区免费 | 综合一区 | 999久久久 | 亚洲中午字幕 | 国产一区二区三区 | 久久久久久久久久久久久9999 | 国产精品久久久久久久久 | 久久久蜜桃 | 久久久久久久一区二区三区 | 国产一级电影网 | 亚洲精品久久久一区二区三区 | 日韩免费视频一区二区 | 午夜午夜精品一区二区三区文 | 精品一二三区 | 久久专区 | 综合激情久久 | 中文字幕国产 | 日韩中文字幕在线观看 | 午夜电影在线播放 | 日本三级电影在线免费观看 | 国产精品视频免费观看 | 蜜桃五月天 | 亚洲精品在线播放 | 国产特级毛片aaaaaa | 一区二区在线观看av |