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

我發現了大廠OpenApi接口的bug!你發現了嗎?

開發 項目管理
在與火山云旗下云游戲產品的 OpenApi 接口對接過程中,我總共踩了三個坑。一是文檔版本不是最新,二是官方提供的 OpenApi 示例 demo 過于簡單,三是官方提供的驗簽代碼沒有考慮到 POST JSON 請求場景下的 contentType 設置問題。

本文記錄我在對接字節旗下產品火山云游戲OpenApi 接口文檔時遇到的坑,希望能幫助大家(火山云旗下云游戲產品的文檔坑很多,我算是從零到一都踩了一遍,特此記錄,希望大家引以為鑒)。

1. 文檔問題

很經典的開局一張圖,對接全靠問。

產品給的圖產品給的圖

這里給大家強調下,當要跟第三方產品對接時,一定要確認拿到的文檔是不是最新版本。

比如我在這次對接中,第一次拿到的文檔是產品給的,在業務中需要用到一個用戶主動退出游戲的接口,于是我在第一份文檔里面找到一個用戶退出游戲的接口 RomoveUser。

RemoveUserRemoveUser

但是當我在控制臺調用此接口報錯后,去群里一問才發現,對方建議我使用官網公布的最新接口文檔。

官網最新文檔:https://www.volcengine.com/docs/6512/143674

進入官網發現 RemoveUser 這個接口已經是歷史接口了,官方建議換到 BanRoomUser 接口。

BanRoomUserBanRoomUser

OK,這里算是踩到了第一個坑,文檔版本不是最新。

ps:還要說一下,火山云旗下云游戲的這個 OpenApi 接口文檔需要在群里聯系他們開白才能看到,說實話給我的感覺很奇怪,懷疑產品是否有趕鴨子上架問題,暫且懷疑他們的目的是防止不明攻擊吧。

2. OpenApi 示例 demo

第三方接口的接入一般都需要做鑒權。火山云旗下云游戲產品的 OpenApi 接口接入當然也不例外。于是我開始了第二個踩坑之旅,那就是他們給出的 OpenApi 示例 demo 的使用過于簡單。

圖片圖片

火山云旗下云游戲產品的 OpenApi 示例 demo 寫的很簡單,只提供了一個 GET 請求示例。

OpenApi 示例 demo 地址:https://github.com/volcengine/veGame

但是在我司的業務場景還是上個問題,需要一個用戶主動退出游戲的接口,在火山云官網的 OpenApi 文檔中我也找到了這個接口,就是上文提到的 BanRoomUser 接口。

但是在官方文檔中 BanRoomUser 接口是一個 POST JSON 格式的請求。官方給出的 OpenApi 示例 demo 中并沒有關于 POST JSON 請求的示例代碼,所以只能靠我一個人查看他們提供的 SDK 依賴源碼硬猜來寫...,這就很讓人頭痛了。

好在我翻閱他們 SDK 源碼中找到一個靠譜的 json(...) 請求方法,來完成這個 POST JSON 請求。

圖片圖片

OK,說干就干,直接寫好示例代碼,開始發送 POST JSON 請求。

錯誤返回錯誤返回

what f**k?什么鬼,返回了我一個 null,此時我的內心中充滿了一個大大的問號。

我開始懷疑我的代碼是不是寫錯了。但是當我經歷過數次源碼 debug 以及調用其他 OpenApi 接口測試并得到正確返回后,我堅定的認為我沒錯,這就是火山云 OpenApi 的 bug!

正常返回正常返回

OK,說干就干,直接反饋給火山那邊。

接著火山那邊的人就聯系說下午兩點開會一起遠程共享我的屏幕看看,OK 欣然接收,讓他們見證下他們寫的 bug!

...

時間來到下午兩點,當我共享屏幕給字節工程師演示這個 bug 時,我的控制臺打印如下:

圖片圖片

woca,竟然不是 null!好在我腦袋靈活,思路清晰,瞬間想到我改了一個參數 GameId,之前返回 null 時,我傳的 GameId 是一個假數據,現在我傳的是一個真數據。造成了返回不一致。

OK,找到了返回正常的原因,當我把 GameId 改成假數據時,如我所愿,返回了一個 null。

圖片圖片

自此,我也就在字節工程師的圍觀下,復現了他們的 OpenApi 接口的線上 bug。大功告成。

3. 鑒權失敗

字節提供的 OpenApi 示例 demo 現在算是跑通了,但是由于我司項目一些依賴限制問題,我們不能直接引入火山云旗下云游戲產品的 SDK 依賴。所以我還得手動編寫生成簽名的代碼。于是我開始了第三個踩坑之旅,那就是 GET 請求驗簽成功 POST 請求驗簽失敗的問題。

這里先說一下,火山云提供了手動生成簽名的示例代碼:

圖片圖片

Java 生成簽名的代碼:https://github.com/volcengine/volc-openapi-demos/blob/main/signature/java/Sign.java

這里我也是直接把簽名代碼拿來即用就行,一開始接入生成簽名代碼非常順利,GET 請求的 OpenApi 接口都是可以順利調通的,但是當我調用 BanRoomUser 接口時(沒錯,又是這個接口,踩的三個坑都與這個接口有關),直接提示驗簽失敗!

驗簽失敗驗簽失敗

OK,開始排查為什么簽名失敗。

圖片圖片

查看源碼發現,POST JSON 請求時的 contentType 還是 application/x-www-form-urlencoded,直覺告訴我這里不對,所以改成 application/json 試試,看看控制臺返回,

圖片圖片

很好,還是驗簽失敗!!!

我盡力了兄弟們,這個坑踩的我是無話可說。直接聯系直接字節開發人員看下我的請求內容是哪里有問題。

在與字節開發人員一起觀摩我寫的代碼以及生成的簽名之后,大家都沒找到問題所在。那沒辦法了,只能上服務器看接口請求日志了。

圖片圖片

大家可以看出問題在哪里嗎?沒錯我剛剛不是把 contentType 改成了 application/json 嗎,為什么日志顯示的 contentType 是 application/json; charset=utf-8!。

OK,到這里問題也找到了,原因是我這個項目用的 http 請求工具是 okhttp3。他自動給我拼接上去的!

那么怎么解決嘞,替換 http3 工具的話,改造成本比較大,所以我就順勢把代碼的 contentType 也改成application/json; charset=utf-8。

在測試一遍,看看控制臺打印。

圖片圖片

OK,拿到成功響應,自此也就解決了第三個坑,POST JSON 請求時的驗簽不匹配問題。

最后給大家貼出手動生成驗簽的代碼,有需要自取。

@Slf4j
public class Sign {
    private static final BitSet URLENCODER = new BitSet(256);
    private static final String CONST_ENCODE = "0123456789ABCDEF";
    public static final Charset UTF_8 = StandardCharsets.UTF_8;
    private final String region;
    private final String service;
    private final String host;
    private final String path;
    private final String ak;
    private final String sk;
    static {
        int i;
        for (i = 97; i <= 122; ++i) {
            URLENCODER.set(i);
        }

        for (i = 65; i <= 90; ++i) {
            URLENCODER.set(i);
        }

        for (i = 48; i <= 57; ++i) {
            URLENCODER.set(i);
        }
        URLENCODER.set('-');
        URLENCODER.set('_');
        URLENCODER.set('.');
        URLENCODER.set('~');
    }

    public Sign(String region, String service, String host, String path, String ak, String sk) {
        this.region = region;
        this.service = service;
        this.host = host;
        this.path = path;
        this.ak = ak;
        this.sk = sk;
    }

    public Headers calcAuthorization(String method, Map<String, String> queryList, byte[] body,
                                     Date date, String action, String version) throws Exception {
        // 請求頭
        Map<String, String> headerMap = new HashMap<>();
        String contentType = "application/x-www-form-urlencoded; charset=utf-8";
        if (body == null) {
            body = new byte[0];
        } else {
            contentType = "application/json; charset=utf-8";
        }
        String xContentSha256 = hashSHA256(body);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
        // String xDate = "20240515T061353Z";
        String xDate = sdf.format(date);
        String shortXDate = xDate.substring(0, 8);
        String signHeader = "content-type;host;x-content-sha256;x-date";

        SortedMap<String, String> realQueryList = new TreeMap<>(queryList);
        realQueryList.put("Action", action);
        realQueryList.put("Version", version);
        StringBuilder querySB = new StringBuilder();
        for (String key : realQueryList.keySet()) {
            querySB.append(signStringEncoder(key)).append("=").append(signStringEncoder(realQueryList.get(key))).append("&");
        }
        querySB.deleteCharAt(querySB.length() - 1);
        String canonicalStringBuilder = method + "\n" + path + "\n" + querySB + "\n" +
                "content-type:" + contentType + "\n" +
                "host:" + host + "\n" +
                "x-content-sha256:" + xContentSha256 + "\n" +
                "x-date:" + xDate + "\n" +
                "\n" +
                signHeader + "\n" +
                xContentSha256;

        // log.info("canonicalStringBuilder is {}", canonicalStringBuilder);
        String hashcanonicalString = hashSHA256(canonicalStringBuilder.getBytes());
        String credentialScope = shortXDate + "/" + region + "/" + service + "/request";
        String signString = "HMAC-SHA256" + "\n" + xDate + "\n" + credentialScope + "\n" + hashcanonicalString;
        // log.info("signString is {}", signString);

        byte[] signKey = genSigningSecretKeyV4(sk, shortXDate, region, service);
        String signature = HexUtil.encodeHexStr(hmacSHA256(signKey, signString));
        String auth = "HMAC-SHA256" +
                " Credential=" + ak + "/" + credentialScope +
                ", SignedHeaders=" + signHeader +
                ", Signature=" + signature;
        headerMap.put("Authorization", auth);
        headerMap.put("X-Date", xDate);
        headerMap.put("X-Content-Sha256", xContentSha256);
        headerMap.put("Host", host);
        headerMap.put("Content-Type", contentType);
        headerMap.put("User-Agent", "volc-sdk-java/v");
        headerMap.put("Accept", "application/json");
        return Headers.of(headerMap);
    }

    private static String signStringEncoder(String source) {
        if (source == null) {
            return null;
        }
        StringBuilder buf = new StringBuilder(source.length());
        ByteBuffer bb = UTF_8.encode(source);
        while (bb.hasRemaining()) {
            int b = bb.get() & 255;
            if (URLENCODER.get(b)) {
                buf.append((char) b);
            } else if (b == 32) {
                buf.append("%20");
            } else {
                buf.append("%");
                char hex1 = CONST_ENCODE.charAt(b >> 4);
                char hex2 = CONST_ENCODE.charAt(b & 15);
                buf.append(hex1);
                buf.append(hex2);
            }
        }

        return buf.toString();
    }

    public static String hashSHA256(byte[] content) throws Exception {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            // return HexFormat.of().formatHex(md.digest(content));
            return HexUtil.encodeHexStr(md.digest(content));
        } catch (Exception e) {
            throw new Exception(
                    "Unable to compute hash while signing request: "
                            + e.getMessage(), e);
        }
    }

    public static byte[] hmacSHA256(byte[] key, String content) throws Exception {
        try {
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(key, "HmacSHA256"));
            return mac.doFinal(content.getBytes());
        } catch (Exception e) {
            throw new Exception(
                    "Unable to calculate a request signature: "
                            + e.getMessage(), e);
        }
    }

    private byte[] genSigningSecretKeyV4(String secretKey, String date, String region, String service) throws Exception {
        byte[] kDate = hmacSHA256((secretKey).getBytes(), date);
        byte[] kRegion = hmacSHA256(kDate, region);
        byte[] kService = hmacSHA256(kRegion, service);
        return hmacSHA256(kService, "request");
    }
}

總結

在與火山云旗下云游戲產品的 OpenApi 接口對接過程中,我總共踩了三個坑。一是文檔版本不是最新,二是官方提供的 OpenApi 示例 demo 過于簡單,三是官方提供的驗簽代碼沒有考慮到 POST JSON 請求場景下的 contentType 設置問題。

責任編輯:武曉燕 來源: 程序員wayn
相關推薦

2022-04-26 06:43:12

文檔TCPLinux

2020-04-14 15:30:00

微信群管理朋友圈

2023-06-24 23:11:07

2024-11-05 09:47:08

VGG網絡模型

2022-11-30 09:18:51

JavaMyBatisMQ

2022-04-18 07:42:31

配置機制Spring

2021-04-22 07:47:47

JavaJDKMYSQL

2020-04-01 08:40:44

Vue.jsweb開發

2024-06-03 11:43:55

2020-09-01 10:32:52

iOS微信新功能

2020-05-18 08:42:23

CSS背景圖像前端開發

2023-06-20 08:01:09

RoseDB存儲數據

2014-08-21 14:49:32

MIUI 6

2021-07-10 07:40:27

Excel數據分析大數據

2021-08-19 15:05:08

微信功能技巧

2018-07-12 14:03:33

區塊鏈新零售電子商務

2021-10-29 11:45:26

Python代碼Python 3.

2025-06-04 08:10:59

2024-11-08 14:18:38

點贊
收藏

51CTO技術棧公眾號

中日韩精品视频在线观看| 日本在线视频播放| 国产精品一区二区三区四区色| 99精品久久久| 揄拍成人国产精品视频| 中文字幕在线视频一区二区| 国产理论在线| 国产精品成人网| 精品午夜一区二区三区| 在线观看国产一区二区三区| 亚洲三级毛片| 久久精品亚洲94久久精品| 欧美xxxxx精品| 欧美成a人片免费观看久久五月天| 亚洲一区免费在线观看| 五月婷婷一区| 手机看片福利永久| 精品亚洲国内自在自线福利| 97香蕉超级碰碰久久免费软件| 国产又粗又猛又爽又黄的视频四季 | 美女网站视频黄色| 国产精品论坛| 亚洲精品欧美激情| 日韩欧美精品在线不卡| 三级在线观看网站| 国产一区二区三区久久久| 日本高清视频一区| 日本亚洲色大成网站www久久| 久久国产电影| 亚洲欧美色婷婷| 男女一区二区三区| 8x国产一区二区三区精品推荐| 欧美精品第1页| 天天碰免费视频| 麻豆理论在线观看| 亚洲大片免费看| 国产在线观看欧美| 精品欧美色视频网站在线观看| 国产三级精品三级在线专区| 国产精品日韩欧美一区二区三区| 国产精品一品二区三区的使用体验| 久久久蜜桃一区二区人| 国模精品视频一区二区| 精品少妇一二三区| 欧美a级片一区| 久久av红桃一区二区小说| 超碰人人人人人人人| 精品成av人一区二区三区| 日韩国产激情在线| 超碰97人人干| 精品中文字幕一区二区三区av| 亚洲精品wwwww| 伊人网综合视频| 欧美日韩一区二区三区在线电影| 亚洲精品xxx| 欧美成人午夜精品免费| 国产中文精品久高清在线不| 亚洲片av在线| a天堂中文字幕| 日韩中文首页| 久久久电影免费观看完整版| 丁香花五月激情| 欧美日韩精选| 97精品国产97久久久久久免费 | 午夜精品av| 欧美精品电影免费在线观看| 草久久免费视频| 久久久精品午夜少妇| 国产成人拍精品视频午夜网站| 久久亚洲精品石原莉奈| 六月丁香婷婷色狠狠久久| 国产免费一区二区三区香蕉精| 国产剧情精品在线| 成人做爰69片免费看网站| 精品久久久久亚洲| 国产午夜视频在线观看| 综合电影一区二区三区 | 91超碰在线| 黑人精品xxx一区一二区| 国产视频在线视频| 国产精品亚洲欧美日韩一区在线| 日韩欧美国产一二三区| 老熟妇精品一区二区三区| 少妇一区二区视频| 久久精品国产亚洲7777| 日本熟妇色xxxxx日本免费看| 狂野欧美一区| 91网免费观看| 欧美日韩视频精品二区| 国产精品久久久久久亚洲毛片| 成人短视频在线观看免费| 成人福利视频| 7777精品伊人久久久大香线蕉的| 在线xxxxx| 成人综合久久| 韩国国内大量揄拍精品视频| 国产免费www| 国产.欧美.日韩| 日韩欧美亚洲日产国| 免费男女羞羞的视频网站在线观看| 精品成人久久av| 午夜激情影院在线观看| 亚洲区小说区图片区qvod按摩| 精品国产欧美一区二区三区成人| 久久狠狠高潮亚洲精品| 精品亚洲国内自在自线福利| 免费国产在线精品一区二区三区| 免费大片在线观看www| 欧美日韩中文在线| 91插插插影院| 国产亚洲一区二区三区啪| 欧美激情乱人伦| 97国产成人无码精品久久久| 久久久美女艺术照精彩视频福利播放| 91麻豆天美传媒在线| 亚洲第一会所| 日韩国产在线看| 欧美日韩中文字幕在线观看| 免费观看久久久4p| 免费不卡亚洲欧美| 黄频免费在线观看| 欧美大片一区二区三区| 欧美性生给视频| 日韩电影在线免费看| 久久艳妇乳肉豪妇荡乳av| 欧美性受ⅹ╳╳╳黑人a性爽| 精品视频999| 好吊视频在线观看| 亚洲深夜激情| aa成人免费视频| 成人三级网址| 51精品久久久久久久蜜臀| 欧美成人另类视频| 日韩av一区二区在线影视| 蜜桃精品久久久久久久免费影院 | 国产精品久久久久久久久免费看 | 国产男女猛烈无遮挡| 国产亚洲一区二区三区四区| 中文字幕无码精品亚洲35| 亚洲图色一区二区三区| 九色91av视频| www.蜜臀av| 亚洲一区二区四区蜜桃| 中文字幕乱码在线人视频| 91精品久久久久久久蜜月| 91久热免费在线视频| 国产精品刘玥久久一区| 日韩一级精品视频在线观看| 麻豆明星ai换脸视频| 国内精品写真在线观看| 亚洲第一页在线视频| www.欧美| 欧美—级高清免费播放| 五月激情婷婷网| 欧美日韩另类在线| 三级网站在线免费观看| 丝袜脚交一区二区| 五月天久久狠狠| 国产免费av国片精品草莓男男| 欧美wwwxxxx| 丰满人妻熟女aⅴ一区| 亚洲国产精品久久人人爱| 小毛片在线观看| 久久精品系列| 夜夜爽www精品| 91久久精品无嫩草影院| 欧美激情亚洲激情| 午夜成人鲁丝片午夜精品| 色婷婷久久久久swag精品| 国产日韩精品中文字无码| 国产精品资源网站| 国产精品又粗又长| 国产精品中文字幕亚洲欧美| 国产欧美欧洲在线观看| 三级资源在线| 亚洲男人天堂2019| 一级黄色片网站| 亚洲一二三四在线| 成人在线一级片| 国产一区美女在线| 91精品国产91久久久久麻豆 主演| 小嫩嫩12欧美| 成人啪啪免费看| 麻豆理论在线观看| 久久精品国产96久久久香蕉| 可以免费看毛片的网站| 在线视频欧美精品| 欧美日韩免费做爰视频| 久久久欧美精品sm网站| 手机在线免费毛片| 久久av一区| 黄色一级大片免费| 欧美日韩色图| 国产精品三区在线| av亚洲一区| 午夜精品福利电影| 久久久久久久久免费视频| 亚洲第一中文字幕在线观看| 亚洲一区中文字幕永久在线| 精品久久久久久久久久久久久| 中文国语毛片高清视频| 91丨九色丨蝌蚪丨老版| 日本高清免费观看| 裸体素人女欧美日韩| www成人免费| 色777狠狠狠综合伊人| 精品国产乱码久久久久久蜜柚| gogo大尺度成人免费视频| 日韩av大片在线| 国产粉嫩在线观看| 久久综合伊人77777蜜臀| 国产黄色片在线观看| 精品成人一区二区| 99久久久久久久| 欧美综合一区二区| 国产精品黄色网| 亚洲午夜电影网| 黄视频网站免费看| 中文字幕第一区第二区| 7788色淫网站小说| 成人亚洲一区二区一| 日韩av片专区| 日本在线不卡一区| 成人小视频在线看| 在线亚洲一区| av女优在线播放| 亚洲午夜电影| 中文字幕の友人北条麻妃| 成人写真视频| 日韩色妇久久av| 精品欧美激情在线观看| 久久精品aaaaaa毛片| 国产精品网站在线看| 97久草视频| 亚洲精品一区二区三区在线| 91精品国产99久久久久久红楼| 自拍偷拍亚洲图片| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 日韩欧美亚洲国产精品字幕久久久| 中文字幕一二区| 欧洲日韩一区二区三区| www.久久网| 欧美午夜精品久久久| 一级片在线免费播放| 在线免费亚洲电影| 国产99免费视频| 在线影院国内精品| 日本成人一级片| 欧美日韩你懂得| 国产乱淫片视频| 日韩欧美一区二区不卡| www.黄色片| 亚洲国产精品网站| 天堂а在线中文在线无限看推荐| 亚洲精品国产精品自产a区红杏吧| 污污视频在线免费看| 亚洲欧美制服综合另类| jyzzz在线观看视频| 日韩中文字幕网站| 中文字幕伦理免费在线视频| 久久久久久久影院| 亚洲精品成人图区| 国产精品男女猛烈高潮激情| 亚洲一区有码| 国产久一道中文一区| 清纯唯美亚洲经典中文字幕| 日韩国产精品一区二区| 91精品国产91久久久久久密臀| 亚洲啊啊啊啊啊| 亚洲国产免费| 激情视频综合网| 麻豆精品久久久| 日本精品一二三区| 久久免费的精品国产v∧| 美女av免费看| 亚洲va欧美va人人爽午夜| 中文人妻av久久人妻18| 制服视频三区第一页精品| 成人午夜视频一区二区播放| 亚洲人免费视频| 黄色一级大片在线免费看产| 97精品一区二区三区| 日本欧美韩国| 99r国产精品视频| 免费久久久久久久久| 女女百合国产免费网站| 亚洲免费网址| 黄色片免费网址| 2023国产精品自拍| 黄色香蕉视频在线观看| 黄色一区二区三区| 国产精品久久777777换脸| 日韩成人中文字幕在线观看| 欧美日韩在线资源| 91成人在线观看国产| 久久免费资源| 久久精品美女| 牛牛国产精品| 日日噜噜噜噜久久久精品毛片| 成人一区二区三区视频| 精品丰满少妇一区二区三区| 精品日韩美女的视频高清| 91精品国产乱码久久久| 亚洲精品黄网在线观看| 求av网址在线观看| 欧美在线视频观看| youjizzjizz亚洲| 一道精品一区二区三区 | 欧美在线视频一二三| 国产专区精品| 色噜噜狠狠色综合网| 亚洲精品综合| 中文字幕第10页| 国产精品欧美一级免费| 亚洲天堂视频网站| 亚洲精品一区二区在线观看| 久cao在线| 国产视频999| 欧美三级伦理在线| 无罩大乳的熟妇正在播放| 国产成人午夜精品5599| 成年人二级毛片| 欧美日韩一区二区欧美激情 | 中文字幕日韩在线| 免费观看国产视频在线| 精品综合久久久久久8888| 亚洲一级片在线播放| 色av一区二区| 黄色影院在线播放| 国产成人精品免高潮在线观看| 美女呻吟一区| av在线播放亚洲| 色婷婷av一区二区三区之红樱桃 | 色999日韩国产欧美一区二区| 欧美 日韩 综合| 久久噜噜噜精品国产亚洲综合| 秋霞影院一区| 中国黄色录像片| 国产成人综合视频| 欧美xxxx黑人xyx性爽| 欧美一级高清大全免费观看| 国产精品va在线观看视色| 国产欧美日韩精品专区| 日本欧美国产| 亚洲精品综合在线| 久草视频免费播放| 日韩精品一区二区在线观看| av色综合久久天堂av色综合在| 91精品在线观| 亚洲欧美一级二级三级| 欧美一级片在线免费观看| 一区二区国产盗摄色噜噜| 亚洲国产精品视频在线| 久久久免费精品| 卡通动漫国产精品| 国产精品丝袜久久久久久消防器材| 91丨九色porny丨蝌蚪| 潘金莲一级淫片aaaaaa播放| 中文字幕日韩电影| 999精品视频在线观看| 992tv快乐视频| 99久久精品国产网站| 手机av免费观看| 日韩小视频网址| 一区二区三区自拍视频| 日韩欧美一区三区| 久久久国际精品| 97人妻精品一区二区三区视频| 欧美精品情趣视频| 任你弄精品视频免费观看| 欧美黑人又粗又大又爽免费| 亚洲欧洲日韩av| 国产18精品乱码免费看| 26uuu另类亚洲欧美日本一| 国产欧美高清视频在线| 精品国产乱码久久久久久1区二区| 亚洲一区二区视频在线观看| 六十路在线观看| 亚洲va久久久噜噜噜久久天堂| 狠狠色狠狠色综合日日tαg| 91国模少妇一区二区三区| 制服丝袜一区二区三区| 国产理论在线| 色乱码一区二区三区熟女| av亚洲产国偷v产偷v自拍| 中文无码精品一区二区三区| 色综合色综合网色综合| 精品理论电影| 国产伦精品一区二区三区88av| 在线观看一区二区精品视频| 在线三级中文| 午夜精品一区二区三区在线观看| 国产精品91xxx| 亚洲国产av一区二区三区| 欧美成人一区在线| 精品国产a一区二区三区v免费| 久久精品一二三四| 91九色02白丝porn| 男女羞羞视频在线观看| 亚洲国产精品123|