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

Spring Boot 不同HTTP客戶端 同步&異步請求對比

開發 前端
我們通過調用 CloseableHttpClient 類上的 execute() 方法對應用程序接口進行同步調用,該方法將使用 StringEntity 實例填充的 HttpPost 對象作為輸入參數。

環境:Spring Boot3.2.5

1. 簡介

超文本傳輸協議(HTTP)是一種用于傳輸超媒體文檔(如HTML)以及標準格式(如JSON和XML)的API數據的應用層協議。

它是應用程序之間通信時常用的協議,這些應用程序以REST API的形式發布其功能。使用Java構建的應用程序依賴某種形式的HTTP客戶端來對其他應用程序進行API調用。

在選擇HTTP客戶端方面存在多種多樣的選項。本文概述了一些主要的庫,這些庫被用作Java應用程序中的HTTP客戶端來進行HTTP請求。

本篇文章將介紹如下幾種HTTP 客戶端:

  1. Java 11及以上版本編寫的應用程序內置了HttpClient
  2. Apache HttpComponents項目的Apache HttpClient
  3. 由Square提供的OkHttpClient
  4. Spring WebFlux中的WebClient

為了覆蓋最常見的場景,我們將查看每種類型的客戶端發送異步HTTP GET請求和同步POST請求的示例。

2. 實戰案例

2.1 準備接口

@RestController
@RequestMapping("/api")
public class ApiController {


  private static List<User> datas = new ArrayList<>() ;
  static {
    datas.addAll(List.of(
        new User(1L, "狗蛋"),
        new User(2L, "観月あかね")
      )) ;
  }
  @GetMapping("/list")
  public List<User> list() {
    return datas ;
  }
  @PostMapping("/save")
  public User save(@RequestBody User user) {
    datas.add(user) ;
    return user ;
  }
}

如上準備了2個接口分別是:GET請求的/list,POST請求的/save。接下來介紹的4個HTTP客戶端都將圍繞這2個接口進行。

2.2 Java HttpClient

原生的HttpClient作為孵化器模塊在Java 9中引入,并在Java 11中作為JEP 321的一部分正式可用。HttpClient替換了自早期Java版本以來JDK中存在的舊版HttpUrlConnection類。它包括以下特性:

  1. 支持HTTP/1.1、HTTP/2和WebSocket
  2. 支持同步和異步編程模型
  3. 以響應式流的方式處理請求和響應體
  4. 支持Cookies

異步GET請求

public static void invoke() throws Exception {


  // 構建客戶端
  HttpClient client = HttpClient.newBuilder()
      .version(Version.HTTP_2)
      .followRedirects(Redirect.NORMAL)
      .build() ;
  // 構造請求對象
  HttpRequest request = HttpRequest.newBuilder()
      .uri(new URI(URLConstants.LIST))
      .GET()
      // 設置超時時間
      .timeout(Duration.ofSeconds(5))
      .build() ;
  // 發送異步請求
  client.sendAsync(request, BodyHandlers.ofString())
    .thenApply(HttpResponse::body)
    .thenAccept(System.out::println)
    // 等待請求完成
    .join() ;
}

請求結果

[{"id":1,"name":"狗蛋"},{"id":2,"name":"観月あかね"}]

通過POST請求

對于 HTTP POST 和 PUT,我們會在生成器上調用 POST(BodyPublisher body) 和 PUT(BodyPublisher body) 方法。BodyPublisher 參數有幾種開箱即用的實現方式,可以簡化請求正文的發送,如下示例:

public static void invokePost() {
  try {
    String requestBody = prepareRequest();
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create(URLConstants.SAVE))
        .POST(HttpRequest.BodyPublishers.ofString(requestBody))
        // 這里必須設置該header,否則會響應415狀態碼錯誤
        .header(HttpHeaders.CONTENT_TYPE, "application/json")
        .header(HttpHeaders.ACCEPT, "application/json")
        .build();


    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.err.printf("響應結果: %s%n", response.body()) ;
  } catch (Exception e) {
    e.printStackTrace();
  }
}
private static String prepareRequest() throws Exception {
  var objectMapper = new ObjectMapper();
  String requestBody = objectMapper.writeValueAsString(new User(666L, "莉莉"));
  return requestBody;
}

在這里,我們在 prepareRequest() 方法中創建了一個 JSON 字符串,用于通過 HTTP POST() 方法發送請求正文。

接下來,我們將使用構建器模式創建一個 HttpRequest 實例,然后同步調用 REST API。

在創建請求時,我們通過調用 POST() 方法將 HTTP 方法設置為 POST,還通過在 BodyPublisher 實例中封裝 JSON 字符串來設置 API URL 和請求正文。

響應是通過使用 BodyHandler 實例從 HTTP 響應中提取的。

2.3 Apache HttpComponents

HttpComponents 是 Apache 軟件基金會下的一個項目,它包含了一組用于處理 HTTP 的低級 Java 組件。該項目下的組件分為:

  • HttpCore:一組低級的 HTTP 傳輸組件,可以用來構建自定義的客戶端和服務器端 HTTP 服務。
  • HttpClient:基于 HttpCore 的一個符合 HTTP 規范的 HTTP 代理實現。它還提供了可重用的組件,用于客戶端身份驗證、HTTP 狀態管理和 HTTP 連接管理。

引入依賴

<dependency>
  <groupId>org.apache.httpcomponents.client5</groupId>
  <artifactId>httpclient5</artifactId>
  <version>5.4</version>
</dependency>

如果是Spring Boot項目中你無需設置具體的版本,Spring Boot已經自動適配了對應的版本。

異步GET請求

public static void invoke() {


  try (CloseableHttpAsyncClient client = HttpAsyncClients.createDefault()) {
    client.start() ;
    final SimpleHttpRequest request = SimpleRequestBuilder.get()
        .setUri(URLConstants.LIST)
        .build() ;


    Future<SimpleHttpResponse> future = client.execute(request, new FutureCallback<SimpleHttpResponse>() {
      public void completed(SimpleHttpResponse result) {
        String response = new String(result.getBodyBytes(), StandardCharsets.UTF_8) ;
        System.out.printf("result: %s%n", response) ;
      }
      public void failed(Exception ex) {
        System.out.printf("error: %s%n", ex) ;
      }
      public void cancelled() {
      }
    }) ;


    HttpResponse response = future.get() ;
    System.out.printf("code: %s, reason: %s%n", response.getCode(), response.getReasonPhrase()) ;
  }
}

請求結果

code: 200, reason: OK
result: [{"id":1,"name":"狗蛋"},{"id":2,"name":"観月あかね"},{"id":666,"name":"莉莉"}]

在這里,我們通過在一個擴展的 try 塊中使用默認參數實例化 CloseableHttpAsyncClient 來創建客戶端。之后,我們啟動客戶端。

接下來,我們使用 SimpleHttpRequest 創建請求,并通過調用 execute() 方法進行異步調用,同時附加一個 FutureCallback 類來捕獲和處理 HTTP 響應。

同步POST請求

public static void invokePost() throws Exception {
  StringEntity stringEntity = new StringEntity(prepareRequest()) ;
  HttpPost httpPost = new HttpPost(URLConstants.SAVE) ;


  httpPost.setEntity(stringEntity) ;
  httpPost.setHeader("Accept", "application/json") ;
  httpPost.setHeader("Content-type", "application/json") ;


  try(CloseableHttpClient httpClient = HttpClients.createDefault()) {
    String result = httpClient.execute(httpPost, new HttpClientResponseHandler<String>() {
      public String handleResponse(ClassicHttpResponse response) throws HttpException, IOException {
        System.out.printf("code: %s, reason: %s%n", response.getCode(), response.getReasonPhrase()) ;
        return EntityUtils.toString(response.getEntity()) ;
      }
    }) ;
    System.out.printf("result: %s%n", result) ;
  } catch (Exception e) {
     e.printStackTrace() ;
  } 
}
private static String prepareRequest() throws Exception {
  var objectMapper = new ObjectMapper();
  String requestBody = objectMapper.writeValueAsString(new User(666L, "Heyzo"));
  return requestBody;
}

請求結果

code: 200, reason: 
result: {"id":666,"name":"Heyzo"}

在這里,我們在 prepareRequest 方法中創建了一個 JSON 字符串,用于以 HTTP POST 方法發送請求正文。

接下來,我們用 StringEntity 類封裝 JSON 字符串,并將其設置在 HttpPost 類中,從而創建請求。

我們通過調用 CloseableHttpClient 類上的 execute() 方法對應用程序接口進行同步調用,該方法將使用 StringEntity 實例填充的 HttpPost 對象作為輸入參數。

2.4 OKHttpClient

OkHttpClient 是一個開源庫,最初由 Square 于 2013 年發布。

引入依賴

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>4.12.0</version>
</dependency>

目前最新的正式版本是4.12.0(5.x目前是alpha版本)。

異步GET請求

public static void invoke() throws Exception {
  OkHttpClient client = new OkHttpClient.Builder()
      .readTimeout(1000, TimeUnit.MILLISECONDS)
      .writeTimeout(1000, TimeUnit.MILLISECONDS)
      .build() ;


  Request request = new Request.Builder().url(URLConstants.LIST).get().build() ;


  Call call = client.newCall(request) ;
  call.enqueue(new Callback() {
    public void onResponse(Call call, Response response) throws IOException {
      System.out.printf("result: %s%n", response.body().string()) ;
    }
    public void onFailure(Call call, IOException e) {
    }
  }) ;
}

在這里,我們使用構建器模式來設置讀寫操作的超時值,從而定制客戶端。

接下來,我們使用 Request.Builder 創建請求已經配置響應測試。然后,我們在客戶端上進行異步 HTTP 調用,并通過附加回調處理程序接收響應。

通過POST請求

public static void invokePost() throws Exception {
  OkHttpClient client = new OkHttpClient.Builder()
      .readTimeout(1000, TimeUnit.MILLISECONDS)
      .writeTimeout(1000, TimeUnit.MILLISECONDS)
      .build() ;
  // 1.準備發送的請求數據
  String requestBody = prepareRequest() ;
  // 2.創建 Request Body
  RequestBody body = RequestBody.create(requestBody, MediaType.parse("application/json")) ;
  // 3.創建HTTP請求
  Request request = new Request.Builder().url(URLConstants.SAVE).post(body).build() ;


  // 4.同步調用發送請求
  Response response = client.newCall(request).execute() ;
  System.out.printf("result: %s%n", response.body().string()) ;
}

請求結果

result: {"id":666,"name":"Heyzo"}

在這里,通過 prepareRequest() 方法中創建了一個 JSON 字符串,用于以 HTTP POST 方法發送請求正文。

接下來,使用 Request.Builder 創建請求。

然后,在通過 OkHttpClient#newCall() 方法對 API 進行同步調用。

當我們創建一個單一的 OkHttpClient 實例并在應用程序中的所有 HTTP 調用中重復使用它時,OkHttp 的性能最佳。安卓應用程序中常用的 HTTP 客戶端(如 Retrofit 和 Picasso)都使用 OkHttp。

2.5 Spring WebClient

Spring WebClient 是 Spring 5 在 Spring WebFlux 項目中引入的異步、反應式 HTTP 客戶端,用于取代舊版 RestTemplate,在使用 Spring Boot 框架構建的應用程序中進行 REST API 調用。它支持同步、異步和流場景。

引入依賴

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

說明:如果你項目中也引入了starter-web模塊,那么創業的應該還是基于servlet技術棧。我們這里引入webflux就是單純的使用WebClient。

異步GET請求

public static void invoke() {
  WebClient client = WebClient.create() ;
  client.get()
    .uri(URLConstants.LIST)
    .retrieve()
    .bodyToMono(String.class)
    .subscribe(System.err::println) ;
}

請求結果

[{"id":1,"name":"狗蛋"},{"id":2,"name":"観月あかね"},{"id":666,"name":"莉莉"}]

首先使用默認設置創建客戶端WebClient。然后,調用客戶端上的 get() 方法來發送 HTTP GET 請求,調用 uri 來設置 API訪問接口。

通過POST請求

public static void invokePost() throws Exception {
  WebClient client = WebClient.create();
  String result = client
      .post()
      .uri(URLConstants.SAVE)
      .contentType(MediaType.APPLICATION_JSON)
      .body(BodyInserters.fromValue(prepareRequest()))
      .retrieve()
      .bodyToMono(String.class)
      .block() ;
  System.out.printf("result: %s%n", result) ;
}

請求結果

result: {"id":666,"name":"Heyzo"}

在這里,我們在 prepareRequest() 方法中創建了一個 JSON 字符串,然后通過 HTTP POST 方法將該字符串作為請求體發送。

然后,通過retrieve()方法獲取響應結果。

最后我們通過block()阻塞訂閱當前的Mono。

3. 如何選擇

總結如下幾點:

  • 如果你不想添加任何外部庫,對于Java 11及以上的應用程序,Java原生的HttpClient是首選。
  • 對于Spring Boot應用程序,特別是當我們使用響應式API時,Spring WebClient是更推薦的選擇。
  • 當我們需要對HTTP客戶端進行最大程度的自定義和配置靈活性時,可以使用Apache HttpClient。由于其在社區中的廣泛使用,與其他庫相比,它在網上有最豐富的文檔資料。
  • 當我們使用外部客戶端庫時,推薦使用Square的OkHttpClient。正如我們在前面的例子中所見,它功能豐富、高度可配置,并且擁有比其他庫更容易使用的API。
責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2010-05-31 10:11:32

瘦客戶端

2009-11-07 14:57:00

2025-03-14 09:20:46

2021-05-21 10:48:09

http語言開發

2009-11-09 15:49:01

WCF異步調用

2010-02-23 09:58:21

WCF客戶端驗證

2021-10-18 05:00:38

語言GoRequestHTTP

2020-03-24 15:15:29

HttpClientOkHttpJava

2024-10-15 10:28:43

2024-07-31 15:57:41

2011-08-03 10:39:06

IOS程序 HTTP 請求

2021-04-09 10:05:20

OneDrive微軟同步客戶端

2024-09-05 09:41:57

2011-08-17 10:10:59

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2020-01-02 16:30:02

Spring BootJava異步請求

2011-07-21 11:30:19

網關選擇產品

2025-10-15 07:24:34

2023-09-19 22:41:30

控制器HTTP

2011-10-26 13:17:05

點贊
收藏

51CTO技術棧公眾號

国产第一页视频| 亚洲一区免费网站| 国产色视频一区二区三区qq号| 女海盗2成人h版中文字幕| av中文字幕一区| 555www成人网| 在线观看美女av| 欧洲vs亚洲vs国产| 69久久99精品久久久久婷婷 | 亚洲第一av色| 欧美资源一区| 性少妇videosexfreexxx片| 在线观看的日韩av| 色黄久久久久久| 女同性恋一区二区三区| 成人51免费| 一本到高清视频免费精品| 400部精品国偷自产在线观看| 五月天久久久久久| 国产毛片精品国产一区二区三区| 国产69精品久久久久久| 欧美三级日本三级| 久久av中文| 精品国产不卡一区二区三区| 欧美一级特黄a| 大菠萝精品导航| 国产精品欧美久久久久一区二区| 精品一区二区久久久久久久网站| 国产毛片在线视频| 蜜桃久久久久久久| 秋霞av国产精品一区| 久久久无码精品亚洲国产| 日韩成人影院| 亚洲人成电影在线观看天堂色| 欧美体内she精高潮| 亚洲不卡系列| 色综合久久六月婷婷中文字幕| 欧美大黑帍在线播放| 成人福利网站| 国产精品成人网| 午夜一区二区三视频在线观看| 欧美日韩影视| 91麻豆高清视频| 久久精品日韩精品| 四虎在线免费看| 99久久99久久精品免费看蜜桃| 国产99午夜精品一区二区三区| 97在线公开视频| 精品在线你懂的| 91免费版网站入口| 国产jzjzjz丝袜老师水多| 激情综合色丁香一区二区| 国产日本欧美在线观看| 夜夜嗨aⅴ一区二区三区| 青青草精品视频| 国产精品免费在线免费 | 久久午夜精品| 国产成人拍精品视频午夜网站| 人妻丰满熟妇av无码区| 久久精品免费| 国产精品成人播放| 一本色道久久综合亚洲| 国产美女精品一区二区三区| 91传媒免费看| 日本精品999| av高清不卡在线| 免费久久99精品国产自| 福利片在线观看| 国产精品国产自产拍高清av王其| 亚洲免费精品视频| 中文字幕免费高清电视剧网站在线观看| 亚洲男同1069视频| 麻豆tv在线播放| 依依综合在线| 欧美日韩国产首页在线观看| 91视频免费入口| 欧美freesex8一10精品| 亚洲香蕉在线观看| 日韩高清dvd碟片| 亚洲国产午夜| 国产精品露脸av在线| 国产又粗又猛又黄| 成人综合婷婷国产精品久久蜜臀| 蜜桃视频日韩| 蜜桃视频在线观看免费视频网站www| 亚洲三级小视频| 蜜桃传媒一区二区三区| 最新日韩一区| 欧美一区二区三区视频免费| 成人区人妻精品一区二 | 伊人久久大香线蕉成人综合网| 久久久久久国产精品免费无遮挡| 一区二区三区中文字幕| 波多野结衣之无限发射| 99久久综合国产精品二区| 91精品视频网| 精品久久久久久中文字幕人妻最新| 欧美在线免费看视频| 欧美人交a欧美精品| 亚洲成人第一网站| 国产精品一区在线| 日韩欧美视频一区二区| 日p在线观看| 欧美日韩国产精品一区二区不卡中文| 日韩毛片在线免费看| 欧美三级一区| 中文欧美日本在线资源| 亚洲激情视频一区| 美女一区二区视频| 久久涩涩网站| 污污片在线免费视频| 欧美在线|欧美| 北岛玲一区二区| 欧美a级在线| 国产精品成人免费电影| 亚洲乱码在线观看| 欧美激情综合五月色丁香小说| 久久综合久久网| 91精品亚洲一区在线观看| 亚洲男人天堂2024| 久久精品久久精品久久| 国产在线视频一区二区| 日韩av电影在线观看| tube8在线hd| 91精品国产色综合久久久蜜香臀| 女人十八毛片嫩草av| 亚洲欧美春色| 国产在线一区二区三区播放| 成人高清免费在线| 91精品啪在线观看国产60岁| 欧美人与禽zoz0善交| 久久裸体视频| 精品乱码一区| 91九色在线看| 亚洲高清久久久久久| 一区二区视频免费看| 久久国产夜色精品鲁鲁99| 欧美亚洲爱爱另类综合| 亚洲最大网站| 亚洲精品videossex少妇| 国产一级黄色av| 国产成人午夜视频| 成人在线免费观看视频网站| 疯狂欧洲av久久成人av电影| 久久精品国产一区| 亚洲天堂狠狠干| 中文字幕亚洲精品在线观看| 亚洲免费看av| 欧美gayvideo| 成人性生交大片免费观看嘿嘿视频| 91在线看片| 欧美日韩一本到| 91ts人妖另类精品系列| 久久机这里只有精品| 致1999电视剧免费观看策驰影院| 国产欧美在线观看免费| 日韩中文字幕视频在线| 91一区二区视频| 亚洲精品ww久久久久久p站 | 99re视频精品| 无码aⅴ精品一区二区三区浪潮| 欧美wwwsss9999| 欧美一区二区三区艳史| 国产九色在线| 欧美日韩国产精品自在自线| 亚洲一区电影在线观看| 国产精品自在在线| 日韩精品在线中文字幕| 欧美人妖视频| 国产精品国产自产拍高清av水多| 一级毛片视频在线| 69久久99精品久久久久婷婷| 国产在线视频在线观看| 99精品视频在线免费观看| 日本毛片在线免费观看| 成人羞羞网站入口免费| 91欧美精品午夜性色福利在线| 欧美v亚洲v| 亚洲欧美在线免费| 一级黄色a视频| 亚洲一区免费视频| 极品白嫩丰满美女无套| 三级不卡在线观看| 国产精品av免费| 精品视频高潮| 国产精品永久免费| 国产偷倩在线播放| 国产亚洲精品久久久优势| 国产又粗又猛又爽又黄的| 性久久久久久久久| 俄罗斯毛片基地| 成人午夜伦理影院| 欧美女同在线观看| 影音先锋在线一区| 亚洲高清视频一区| 97se亚洲| 国产裸体写真av一区二区| 激情网站在线| 中文字幕在线精品| 天堂av网在线| 日韩一级视频免费观看在线| 久久99国产综合精品免费| 亚洲人成人一区二区在线观看| 国产一线在线观看| 精品一区二区免费| 自慰无码一区二区三区| 一级欧洲+日本+国产| 免费精品视频一区二区三区| 日韩欧美中文字幕在线视频| 国产成人福利视频| av在线理伦电影| 久久中文字幕国产| 国产女人在线视频| 亚洲精品成a人在线观看| 国产女人高潮的av毛片| 91黄视频在线| 日本污视频在线观看| 亚洲女同女同女同女同女同69| 双性尿奴穿贞c带憋尿| 国产精品一区二区免费不卡| 中国黄色片免费看| 噜噜噜在线观看免费视频日韩 | 国产一区视频观看| 涩涩涩久久久成人精品| 日韩美女免费线视频| 成人免费图片免费观看| 欧美激情亚洲一区| 国产视频中文字幕在线观看| 中文字幕精品久久久久| 深夜影院在线观看| 欧美精品一区二区在线播放 | 亚洲欧美三级在线| 日本黄视频在线观看| 精品国产精品网麻豆系列 | 久久伊人国产| 国产精品白丝jk喷水视频一区| www.51av欧美视频| 久久久久久亚洲精品中文字幕| av电影免费在线观看| 日韩视频永久免费观看| 日本福利在线| 中文字幕亚洲无线码a| 韩国福利在线| 亚洲欧美国内爽妇网| 欧美色18zzzzxxxxx| 亚洲女人天堂成人av在线| 三级毛片在线免费看| 亚洲精品电影在线| 熟妇高潮一区二区高潮| 精品精品国产高清一毛片一天堂| 99在线精品视频免费观看20| 69av一区二区三区| 99精品在线看| 日韩一区二区在线观看视频播放| 国产情侣一区二区| 欧美一区二区三区四区视频| 精品国产18久久久久久| 欧美一区二区三区免费| 精品人妻av一区二区三区| 欧美一区二区啪啪| 亚洲国产精彩视频| 欧美成人三级电影在线| 色哟哟国产精品色哟哟| 亚洲欧美激情视频| 日韩大片在线永久免费观看网站| 中文字幕欧美日韩在线| 麻豆tv在线| 欧美日本在线视频中文字字幕| 国产丝袜视频在线播放| 91精品国产九九九久久久亚洲| 日韩脚交footjobhd| 国产精品扒开腿做| 中文字幕日韩亚洲| 国产精品美女xx| 亚州av日韩av| 亚洲精品第一区二区三区| 亚洲天堂免费| 美脚丝袜脚交一区二区| 久久婷婷影院| www激情五月| 91丨porny丨国产| 一级黄色片网址| 亚洲激情在线激情| 青青草成人av| 欧美日韩色一区| 亚洲精品国产av| 亚洲一区二区精品| 好吊日视频在线观看| 性色av一区二区三区红粉影视| av高清一区| yy111111少妇影院日韩夜片| 在线成人动漫av| 黄色一级片网址| 午夜亚洲影视| 欧美激情国内自拍| 91麻豆国产福利在线观看| 精品国产欧美日韩不卡在线观看 | 久久视频免费在线播放| www成人免费观看| 国产日韩欧美自拍| 日本国产精品| 无颜之月在线看| 日本美女一区二区| 大乳护士喂奶hd| 亚洲欧洲三级电影| 亚洲欧美日韩激情| 精品久久久久99| 国产激情小视频在线| 国产福利精品视频| 国产精东传媒成人av电影| 亚洲欧洲日韩精品| 午夜亚洲视频| 白嫩情侣偷拍呻吟刺激| 亚洲欧洲日产国码二区| 久久久蜜桃一区二区| 欧美va亚洲va香蕉在线| 嫩草香蕉在线91一二三区| 欧美资源在线观看| 丁香综合av| 欧美日韩视频免费| 狠狠狠色丁香婷婷综合久久五月| 97在线观看免费视频| 欧美日韩国产影院| 成人毛片在线精品国产| 欧美成人合集magnet| 欧美jizz18| 日韩免费电影一区二区| 性色一区二区| 影音先锋黄色资源| 亚洲成人激情综合网| 精品美女www爽爽爽视频| 久久人体大胆视频| h1515四虎成人| 日韩中文字幕一区二区| 免费日韩精品中文字幕视频在线| 无码人妻精品一区二区三| 亚洲黄色尤物视频| 国产三区在线播放| 久久亚洲欧美日韩精品专区 | 国产综合18久久久久久| 精品av久久久久电影| 日韩成人av影院| 亚洲一区二区精品视频| 亚洲精品久久久久久久久久久久久久| 粗暴蹂躏中文一区二区三区| 国产精品久久久久久av公交车| 自拍亚洲欧美老师丝袜| 国内精品免费在线观看| 欧美第一页在线观看| 制服丝袜中文字幕一区| 99自拍视频在线观看| 91超碰在线电影| 欧美高清一区| 制服丝袜在线第一页| 香蕉成人伊视频在线观看| 天天操天天射天天| 97人人做人人爱| 免费电影一区二区三区| 亚洲 中文字幕 日韩 无码| 欧美激情中文不卡| 亚洲永久精品视频| 欧美成人黄色小视频| 国产精品1luya在线播放| 久久亚洲中文字幕无码| 2020国产成人综合网| 91丨九色丨海角社区| 色噜噜亚洲精品中文字幕| 国产精品xnxxcom| 屁屁影院ccyy国产第一页| 99天天综合性| 国产真人无遮挡作爱免费视频| 中文字幕精品网| 日韩三级不卡| 国产乱子伦农村叉叉叉| 欧美激情自拍偷拍| www.亚洲欧美| 欧美在线视频在线播放完整版免费观看| 国产日产精品_国产精品毛片| 一区二区xxx| 亚洲一区二区三区激情| 黄色影院在线播放| 亚洲一区亚洲二区| 久久精品系列| 天天看天天摸天天操| 亚洲精品在线观| 欧美色片在线观看| 欧洲xxxxx| 久久伊人蜜桃av一区二区| 一道本在线视频| 韩国19禁主播vip福利视频| 教室别恋欧美无删减版| 26uuu国产| 日本久久一区二区| 丝袜国产在线| 日韩亚洲视频| 成人的网站免费观看| 一区二区国产欧美| 5278欧美一区二区三区| 一区二区三区国产精华| 久久久久久久毛片|