精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go 標準庫 net/url 學習筆記

開發 后端
本文是一篇學習筆記,記錄了作者學習 go 語言標準庫 net/url 庫的過程。

[[417414]]

 本文是一篇學習筆記,記錄了作者學習 go 語言標準庫 net/url 庫的過程。

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

導入方式: 

  1. import "net/url" 

url 包解析 URL 并實現了查詢的逸碼,參見 RFC 3986。

func PathEscape

  1. func PathEscape(s string) string 

PathEscape 會將字符串轉義出來,以便將其安全地放置在 URL 路徑段中。

func PathUnescape 

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

PathUnescape 執行 PathEscape 的逆轉換,將 %AB 轉換為字節 0xAB 。如果任何 % 之后沒有兩個十六進制數字,它將返回一個錯誤。

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

func QueryEscape 

  1. func QueryEscape(s string) string 

QueryEscape 函數對 s 進行轉碼使之可以安全的用在 URL 查詢里。

func QueryUnescape 

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

QueryUnescape 函數用于將 QueryEscape 轉碼的字符串還原。它會把%AB 改為字節 0xAB,將'+'改為' '。如果有某個%后面未跟兩個十六進制數字,本函數會返回錯誤。

舉例: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "encoding/base64"  
  5.     "net/url"  
  6.     "crypto/rand"  
  7.     "io"  
  8.     "log"  
  9.  
  10. //sessionId 函數用來生成一個 session ID,即 session 的唯一標識符  
  11. func sessionId() string {  
  12.     b :make([]byte, 32)  
  13.     //ReadFull 從 rand.Reader 精確地讀取 len(b) 字節數據填充進 b  
  14.     //rand.Reader 是一個全局、共享的密碼用強隨機數生成器  
  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)//將生成的隨機數 b 編碼后返回字符串,該值則作為 session ID 
  20.   
  21. func main() {   
  22.     sessionId :sessionId()   
  23.     fmt.Println(sessionId) //7vbrpjDEnY97jPHI1XH3qNuE0KPfGEiich6vzbB1i3Y 
  24.     encodedSessionId :url.QueryEscape(sessionId) //對 sessionId 進行轉碼使之可以安全的用在 URL 查詢里  
  25.     fmt.Println(encodedSessionId) //7vbrpjDEnY97jPHI1XH3qNuE0KPfGEiich6vzbB1i3Y%3D  
  26.     decodedSessionId, err :url.QueryUnescape(encodedSessionId) //將 QueryEscape 轉碼的字符串還原  
  27.     if err != nil {  
  28.         log.Fatal(err)  
  29.     }  
  30.     fmt.Println(decodedSessionId) //7vbrpjDEnY97jPHI1XH3qNuE0KPfGEiich6vzbB1i3Y 

type URL 

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

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

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

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

  1. 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 

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

Parse 函數解析 rawurl 為一個 URL 結構體,rawurl 可以是絕對地址,也可以是相對地址。

func ParseRequestURI 

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

ParseRequestURI 函數解析 rawurl 為一個 URL 結構體,本函數會假設 rawurl 是在一個 HTTP 請求里,因此會假設該參數是一個絕對 URL 或者絕對路徑,并會假設該 URL 沒有#fragment 后綴。(網頁瀏覽器會在去掉該后綴后才將網址發送到網頁服務器)

func (*URL) IsAbs

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

函數在 URL 是絕對 URL 時才返回真。

舉例: 

  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 類型鍵值對。

舉例: 

  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 重構為一個合法 URL 字符串。

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

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

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

在第二種形式中,適用下列規則: 

  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 的轉義形式。一般來說,任何路徑都有多種可能的轉義形式。EscapedPath 在 u.Path 有效轉義時返回 u.RawPath 。否則,EscapedPath 將忽略 u.RawPath 并自行計算轉義表單。String 和 RequestURI 方法使用 EscapedPath 來構造它們的結果。通常,代碼應該調用 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 

主機名返回 u.Host ,沒有任何端口號。

如果主機是具有端口號的 IPv6 文本,則主機名將返回不帶方括號的 IPv6 文字。IPv6 文字可能包含區域標識符。

舉例: 

  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 的端口部分,不帶前導冒號。如果 u.Host 不包含端口,則 Port 返回空字符串。

func (*URL) Parse 

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

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

本方法解析失敗會返回 nil, err;否則返回結果和 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  

本方法根據一個絕對 URI 將一個 URI 補全為一個絕對 URI,參見 RFC 3986 節 5.2。參數 ref 可以是絕對 URI 或者相對 URI。ResolveReference 總是返回一個新的 URL 實例,即使該實例和 u 或者 ref 完全一樣。如果 ref 是絕對 URI,本方法會忽略參照 URI 并返回 ref 的一個拷貝。

舉例:

當 ref 是相對路徑,則其將會相對于 u 來得到其的絕對路徑: 

  1. package main   
  2. import(  
  3.     "fmt"  
  4.     "net/url"  
  5.     "log"  
  6.  
  7. func main() {   
  8.   //該相對路徑的意思是  
  9.     u, err :url.Parse("../../..//search?q=dotnet")//相對路徑的不同會影響返回的結果  
  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 

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

但是如果相對路徑為。.//search?q=dotnet,將返回 http://example.com//search?q=dotnet,這并不是我們想要的結果。如果想要相對于 directory 目錄,則相對路徑寫成。/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() //將其轉成二進制  
  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.     //將其從二進制轉成 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.     // 內含隱藏或非導出字段  

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

func User

  1. func User(username string) *Userinfo 

User 函數返回一個用戶名設置為 username 的不設置密碼的* Userinfo。

func UserPassword 

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

UserPassword 函數返回一個用戶名設置為 username、密碼設置為 password 的* Userinfo。

這個函數應該只用于老式的站點,因為風險很大,不建議使用,參見 RFC 2396。

func (*Userinfo) Username 

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

Username 方法返回用戶名。

func (*Userinfo) Password 

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

如果設置了密碼返回密碼和真,否則會返回假。

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 將建映射到值的列表。它一般用于查詢的參數和表單的屬性。不同于 http.Header 這個字典類型,Values 的鍵是大小寫敏感的。

func ParseQuery 

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

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

舉例: 

  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 會獲取 key 對應的值集的第一個值。如果沒有對應 key 的值集會返回空字符串。獲取值集請直接用 map。

func (Values) Set 

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

Set 方法將 key 對應的值集設為只有 value,它會替換掉已有的值集。

func (Values) Add 

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

Add 將 value 添加到 key 關聯的值集里原有的值的后面。

func (Values) Del 

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

Del 刪除 key 關聯的值集。

func (Values) Encode 

  1. func (v Values) Encode() string 

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

舉例: 

  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 

 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2010-01-15 14:59:54

C++標準程序庫

2023-04-02 23:13:07

Go語言bufio

2009-10-21 14:52:30

綜合布線系統標準

2024-09-29 16:04:14

2021-12-10 15:22:26

Go Zip 文件

2023-09-27 08:26:48

Go標準庫函數

2009-10-16 11:21:54

VB.NET Decl

2009-10-13 14:29:49

VB.NET名字空間

2023-10-11 08:45:55

Go標準庫指標

2025-10-31 09:01:37

2009-08-11 10:21:54

ASP.NET構建數據

2009-10-16 13:38:43

VB.NET Spli

2009-10-14 09:27:30

VB.NET編碼算法

2021-10-18 10:53:26

Go 代碼技術

2010-01-14 09:43:26

C++標準程序庫

2023-12-04 08:46:40

Go標準庫

2014-01-14 09:10:53

GoHTTP內存泄漏

2023-11-01 08:41:24

Go標準庫http

2023-12-26 07:37:27

2009-10-13 14:38:15

.NET重寫URL
點贊
收藏

51CTO技術棧公眾號

欧美成人片在线| 天堂网视频在线| 欧美国产中文高清| 午夜精品久久久久久不卡8050| 玛丽玛丽电影原版免费观看1977 | 黄色欧美日韩| 亚洲夜晚福利在线观看| 日本少妇xxx| 日本欧美韩国| 亚洲电影激情视频网站| 亚洲激情电影在线| 手机在线不卡av| 美国一区二区三区在线播放 | 国产一区二区高清在线| 黑人巨大精品欧美一区二区| 中文字幕日韩一区二区三区| 日韩在线观看视频网站| 久久69国产一区二区蜜臀| 欧美亚洲激情在线| 麻豆精品一区二区三区视频| 国产最新精品| 亚洲国产成人精品女人久久久 | 2020国产精品视频| 手机在线免费看毛片| 亚洲欧洲av| 欧美精品一区二区精品网| 五月天婷婷亚洲| 久久爱91午夜羞羞| 亚洲丰满少妇videoshd| ijzzijzzij亚洲大全| av电影在线网| 久久精品亚洲麻豆av一区二区 | 3d动漫精品啪啪一区二区三区免费| 亚洲影院在线播放| 亚洲欧洲日本mm| 欧美成人免费在线观看| 亚洲女人久久久| 俺要去色综合狠狠| 国产亚洲欧美日韩精品| 巨胸大乳www视频免费观看| 澳门成人av| 日韩欧美亚洲国产精品字幕久久久 | 国产嫩草一区二区三区在线观看| 国产夫绿帽单男3p精品视频| 精品亚洲成a人| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 成人一级片网址| 91av免费看| 国产人妻精品一区二区三区| 美女视频一区在线观看| 国产精品视频地址| 中文字幕欧美人妻精品一区蜜臀 | 亚洲精品乱码久久久久久动漫| 国产香蕉久久| 欧美日韩国产区一| 日本美女视频一区| 欧美成人精品午夜一区二区| 欧美一区二区三区性视频| 久久久久久综合网| 无人区乱码一区二区三区| 日韩小视频在线观看专区| 伊人影院在线观看视频| av成人资源网| 亚洲精品永久免费| 日本美女bbw| 国产精品久久久久蜜臀| 欧美国产日韩xxxxx| 日韩av在线播放观看| 亚洲男女自偷自拍| 国产精品福利在线观看网址| 亚洲天天综合网| 国产精品一区二区久久不卡| 国产精品精品软件视频| www.国产.com| 26uuu另类欧美亚洲曰本| 日韩欧美在线电影| 超碰在线网址| 午夜av一区二区| 丝袜制服一区二区三区| av日韩久久| 亚洲国产高清福利视频| 日本污视频网站| 影音先锋日韩精品| 欧美在线观看日本一区| 一区精品在线观看| 成人激情校园春色| 手机成人在线| 成人免费一区二区三区牛牛| 色av综合在线| 中文字幕一区二区三区四| 激情小说亚洲图片| 最近中文字幕mv在线一区二区三区四区| 又嫩又硬又黄又爽的视频| 欧美日韩网站| 国产精品久久久久久久9999| 性一交一乱一乱一视频| 久久久777精品电影网影网| 欧美xxxx吸乳| 四虎影视4hu4虎成人| 精品国产伦一区二区三区免费 | 亚洲另类一区二区| 哪个网站能看毛片| 成人黄色理论片| 亚洲精品网址在线观看| 欧美在线视频第一页| 久久精品首页| 国产一区二区自拍| 黄色网址视频在线观看| 色狠狠桃花综合| 色哟哟无码精品一区二区三区| 久久福利综合| 日av在线播放中文不卡| 性生交大片免费看女人按摩| 亚洲国产成人在线| 国产中文字幕二区| 国产美女视频一区二区 | 亚洲奶水xxxx哺乳期| 91国偷自产一区二区三区观看| 挪威xxxx性hd极品| 欧美一区91| 成人午夜在线影院| 国产1区2区3区在线| 天天亚洲美女在线视频| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 亚洲综合好骚| 激情五月综合色婷婷一区二区 | 中文字幕乱妇无码av在线| 精品精品久久| 人体精品一二三区| 亚洲欧美日韩成人在线| 亚洲成人免费观看| 俄罗斯女人裸体性做爰| 一个色综合网| 成人欧美一区二区三区在线湿哒哒| 成人jjav| 欧美三区在线视频| 少妇人妻好深好紧精品无码| 鲁大师成人一区二区三区| 久久er99热精品一区二区三区| 少妇视频在线| 精品久久久久久最新网址| 日本午夜在线观看| 国产一区二区三区美女| 成年人黄色在线观看| 日韩黄色三级在线观看| www国产精品视频| 一级视频在线播放| 亚洲欧美另类小说视频| 麻豆传媒在线看| 欧美性色综合| 国产专区欧美精品| 热草久综合在线| 日韩大胆人体| 欧美中文字幕久久| 精品少妇一区二区三区密爱| 久久精品国产久精国产爱| 香蕉视频在线网址| 亚洲不卡在线| 国内精品久久久久久影视8| 天天综合网在线观看| 欧美午夜视频一区二区| 国产综合精品在线| 久久精品国产精品亚洲综合| 男人的天堂视频在线| heyzo欧美激情| 欧洲午夜精品久久久| 91caoporn在线| 69堂成人精品免费视频| 国产一级在线观看视频| 91一区一区三区| 亚洲综合色在线观看| 欧美在线资源| 久久久一本精品99久久精品66| 久久人体大尺度| 精品国偷自产在线| 国产综合在线播放| 色天使色偷偷av一区二区| 亚洲女同二女同志奶水| 高清视频一区二区| 能在线观看的av网站| 亚洲成人免费| 久热这里只精品99re8久| 国产极品嫩模在线观看91精品| 久色乳综合思思在线视频| 天天操天天射天天| 欧美日免费三级在线| 久久国产精品二区| 国产人成亚洲第一网站在线播放| 亚洲第一色av| 性久久久久久| 麻豆中文字幕在线观看| 亚洲最好看的视频| 91精品国产一区二区三区动漫 | caopeng在线| 亚洲男人天堂网| 精品人妻久久久久一区二区三区 | 97超碰资源站| 激情成人在线视频| 高h视频免费观看| 国产亚洲成年网址在线观看| 国产sm在线观看| a日韩av网址| 99久久er热在这里只有精品15| 美女福利视频在线| 欧美女人交a| 亚洲图片在线观看| 免费看av成人| 国产欧美日韩综合一区在线观看| 欧美videos粗暴| 欧洲成人免费aa| 超碰在线网站| 播播国产欧美激情| 精品电影在线| 亚洲激情久久久| 亚洲精品成av人片天堂无码| 欧美日韩国产首页| 亚洲av无码精品一区二区| 性做久久久久久免费观看| 成人在线观看免费完整| 国产日韩欧美综合在线| 精品人妻一区二区三区日产乱码卜| 国产传媒一区在线| 男人操女人下面视频| 美女网站在线免费欧美精品| 999在线免费视频| 亚洲欧美日本国产专区一区| 日韩 欧美 视频| 欧美一区亚洲| 国产欧美自拍视频| 国产精品88久久久久久| 一区不卡字幕| 日本精品黄色| 亚洲国产一区二区三区在线| 啄木系列成人av电影| 久久精品一区二区三区不卡免费视频| y111111国产精品久久久| www.久久爱.cn| 一本色道69色精品综合久久| 亚洲自拍偷拍福利| 国产一区二区三区| av成人午夜| eeuss国产一区二区三区四区| 国产91视觉| 麻豆一区二区麻豆免费观看| 久久久久久国产精品免费免费| 精品五月天堂| 精品视频一区二区| 色狠狠久久av综合| 欧美在线3区| 精品色999| 亚洲巨乳在线观看| 香蕉av一区二区 | 伊人久久亚洲美女图片| 欧美高清中文字幕| 国产精品videosex极品| 精品丰满人妻无套内射| 久久av一区二区三区| 国产成人综合一区| 狠狠色狠狠色综合| 国偷自产av一区二区三区麻豆| jvid福利写真一区二区三区| 熟女人妻在线视频| 日本欧美韩国国产| 伊人一区二区三区久久精品| 91青青在线视频| 久久国产一区二区三区| 在线观看wwwxxxx| 6080yy精品一区二区三区| 欧美暴力调教| 亚洲精品免费一区二区三区| 国内精品麻豆美女在线播放视频 | 91tv官网精品成人亚洲| 黄色网在线视频| 国产日韩欧美一区| 欧美特级aaa| 高清国产午夜精品久久久久久| mm131美女视频| 亚洲欧美日韩国产一区二区三区 | 欧美伊人久久久久久久久影院| 亚洲综合视频在线播放| 亚洲精品一区二区在线观看| 国产在线观看精品一区| 久久精品视频在线观看| jizzjizz中国精品麻豆| 国产精品高潮呻吟久久av无限| 欧美视频二区欧美影视| 蜜桃成人在线| 亚洲国产精品日韩专区av有中文| 国产黄页在线观看| 麻豆精品精品国产自在97香蕉| 亚洲免费观看在线| 欧美国产精品一区二区| 国产精品23p| 欧美男生操女生| 少妇高潮一区二区三区69| 丝袜亚洲另类欧美重口| av剧情在线观看| 成人国产精品久久久久久亚洲| 久久成人福利| 久久久久久久免费视频| 久久狠狠一本精品综合网| 一区二区三区四区影院| 中文字幕av不卡| 午夜婷婷在线观看| 日韩精品中文字幕在线一区| 丁香婷婷在线| 欧美一级电影在线| 综合激情五月婷婷| 一区二区三区四区五区视频| 国产视频久久| 久久性爱视频网站| 亚洲狼人国产精品| 中文字幕欧美在线观看| 日韩久久免费视频| 黄页网站在线观看免费| 成人激情视频网| 成人看的视频| 久久九九国产视频| 91免费看片在线观看| 久久午夜鲁丝片午夜精品| 911国产精品| 欧洲不卡视频| 国产美女久久精品| 成人情趣视频| 别急慢慢来1978如如2| 国产亚洲欧美色| 日韩手机在线视频| 国产成人综合视频| 国产精品手机视频| 欧美激情欧美| 日韩爱爱小视频| 国产精品美女久久久久久久网站| 在线视频一区二区三区四区| 亚洲国产精久久久久久久| 欧洲成人综合网| 成人在线看片| 国产精品mv在线观看| a级大片免费看| 伊人婷婷欧美激情| 亚洲AV午夜精品| 欧美福利视频网站| 在线日韩成人| 欧美视频免费看欧美视频| 成人福利视频网站| 日韩欧美亚洲一区二区三区| 亚洲国产美女久久久久| 国精产品一区一区三区mba下载| 不卡一卡2卡3卡4卡精品在| 韩日精品在线| 黄色av网址在线观看| 精品久久久香蕉免费精品视频| 日本xxxx人| 欧美在线视频免费播放| 国产剧情一区| 污视频网站观看| 亚洲手机成人高清视频| 亚洲第一页综合| 91av在线国产| 日本在线电影一区二区三区| 亚洲综合欧美激情| 亚洲精品第一国产综合野| 免费观看黄一级视频| 日本精品视频在线播放| 色喇叭免费久久综合| 91视频福利网| 精品久久久一区| 在线激情网站| 国产精品xxxx| 日韩视频在线一区二区三区| 午夜在线观看一区| 欧美肥妇毛茸茸| 岛国毛片av在线| 色狠狠久久av五月综合|| 激情综合一区二区三区| 国产精品第72页| 亚洲天堂av在线免费| 国产视频一区二区在线播放| 欧美午夜性视频| 国产清纯美女被跳蛋高潮一区二区久久w | **女人18毛片一区二区| 日韩av无码一区二区三区不卡| 色噜噜偷拍精品综合在线| 国产亚洲欧美精品久久久久久| 欧美精品三级| 亚洲欧美中日韩| 亚洲天堂网2018| 亚洲免费观看高清完整版在线观看熊| 亚洲国产综合网| 国产高清视频一区三区| 中文字幕免费一区二区| 免费观看av网站| 日韩视频中午一区| 婷婷综合六月| 国产肉体ⅹxxx137大胆| 亚洲国产精华液网站w| 日本免费一区视频| 成人精品一区二区三区电影黑人| 国产一区二区高清| 国产1区2区3区4区| 在线播放日韩专区|