亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

Qt POST JSON 避坑指南:從QJsonObject到QNetworkReply完整封裝

Qt POST JSON 避坑指南:從QJsonObject到QNetworkReply完整封裝 簡介面向Qt初學(xué)者與桌面應(yīng)用開發(fā)者的HTTP網(wǎng)絡(luò)通信示例演示如何借助QNetworkAccessManager發(fā)起POST請(qǐng)求將QJsonDocument、QJsonObject構(gòu)造的JSON數(shù)據(jù)轉(zhuǎn)為字符串再經(jīng)toUtf8()編碼后作為請(qǐng)求體發(fā)送至服務(wù)器并正確處理響應(yīng)。工程配有簡潔界面便于通過按鈕觸發(fā)請(qǐng)求并在界面上查看返回結(jié)果適合快速理解Qt網(wǎng)絡(luò)模塊、JSON序列化與異步信號(hào)槽的配合用法。資源包僅5個(gè)文件包含2個(gè)cpp、1個(gè)h、1個(gè)ui、1個(gè)procpp分別負(fù)責(zé)入口和主窗口邏輯h聲明網(wǎng)絡(luò)請(qǐng)求相關(guān)成員與槽函數(shù)ui定義可視布局pro聲明network、widgets等模塊依賴。整體壓縮包大小僅3KB結(jié)構(gòu)緊湊、無冗余資源可直接用Qt Creator打開并編譯運(yùn)行適合作為輕量級(jí)參考工程。目前已有5380人學(xué)習(xí)。研讀源碼可掌握設(shè)置application/json請(qǐng)求頭、調(diào)用post()發(fā)送數(shù)據(jù)、通過信號(hào)槽接收服務(wù)端回包等關(guān)鍵寫法也可作為向既有桌面程序集成網(wǎng)絡(luò)功能的起步模板。1. Qt 里 POST JSON 的坑十有八九不在網(wǎng)絡(luò)庫做 Qt 開發(fā)用 Qthttp 發(fā) POST 請(qǐng)求、帶上 JSON body是再常見不過的需求登錄鑒權(quán)、狀態(tài)上報(bào)、調(diào)用開放的接口服務(wù)幾乎每個(gè)項(xiàng)目都會(huì)碰到。很多朋友從網(wǎng)上找一段 postjson 的示例抄過來結(jié)果服務(wù)端要么收到空 body要么返回亂碼要么請(qǐng)求發(fā)出去之后石沉大海連回調(diào)都不觸發(fā)。這時(shí)候最容易懷疑 Qt 的 HTTP 模塊不靠譜但根據(jù)我拆過的一堆案例來看問題大多出在三個(gè)地方請(qǐng)求頭 Content-Type 沒和服務(wù)端對(duì)齊、JSON 序列化格式選錯(cuò)、QNetworkReply 的生命周期沒管住。這篇文章從 QJsonObject 怎么組裝、QNetworkRequest 怎么配置一直講到 QNetworkReply 怎么安全收尾最后給出一套適合工程落地的封裝思路。適合正在用 C/Qt 對(duì)接服務(wù)端接口的開發(fā)者也適合剛看懂示例但一改就翻車的新手。2. POST JSON 最小鏈路從 QJsonObject 到 QNetworkReply 的完整流程2.1 QNetworkAccessManager 的生命周期與選型在 Qt 里發(fā) HTTP 請(qǐng)求核心門面是 QNetworkAccessManager連接管理、請(qǐng)求調(diào)度、代理設(shè)置、SSL session 緩存都由它統(tǒng)一管理。我一般建議一個(gè)程序生命周期里只創(chuàng)建它一次長期復(fù)用。原因很簡單它內(nèi)部維護(hù)了 DNS 緩存、SSL session 緩存和底層的連接池如果你每次請(qǐng)求都 new 一個(gè)再 delete這些緩存全部作廢表現(xiàn)就是請(qǐng)求變慢、并發(fā)上來之后反復(fù)握手。這個(gè)差異在局域網(wǎng)接口上不明顯一旦連公網(wǎng)服務(wù)體感差距就很明顯。QNetworkAccessManager 的線程模型需要說一下它是可重入的也就是說不同實(shí)例可以分配在不同線程使用但同一個(gè)實(shí)例不建議跨線程調(diào)用。實(shí)際項(xiàng)目里最常見的做法是把 manager 放在主線程所有 post 都在主線程發(fā)起如果必須在工作線程用就讓那個(gè)線程自己創(chuàng)建自己的 manager不要共享。聲明一個(gè)請(qǐng)求用 QNetworkRequest最基礎(chǔ)的配置是這樣QNetworkRequest request; request.setUrl(QUrl(https://api.example.com/v1/user/login)); request.setHeader(QNetworkRequest::ContentTypeHeader, application/json);URL 這塊有個(gè)很容易忽略的細(xì)節(jié)如果地址里帶了中文參數(shù)、空格或者特殊符號(hào)直接丟給 setUrl最終發(fā)送的字節(jié)可能是錯(cuò)的服務(wù)端收到之后要么 404要么參數(shù)解析不對(duì)。常見的做法是先對(duì)查詢參數(shù)做百分號(hào)編碼或者直接用 QUrlQuery 構(gòu)造查詢串后面 3.3 節(jié)會(huì)專門講。2.2 JSON 構(gòu)造與序列化別用手拼字符串很多人喜歡這樣拼 JSONQString({name:%1,age:%2}).arg(name).arg(age)。這種寫法在小字段場景下能用但一旦字段值里出現(xiàn)引號(hào)、反斜杠、換行你就要自己處理轉(zhuǎn)義而服務(wù)端 JSON 解析器是零容忍的只要有一處引號(hào)不對(duì)稱整個(gè)請(qǐng)求直接拒收。正確做法是先用 QJsonObject 組織數(shù)據(jù)再交給 QJsonDocument 序列化QJsonObject body; body.insert(username, demo); body.insert(age, 28); body.insert(active, true); QJsonDocument doc(body); QByteArray payload doc.toJson(QJsonDocument::Compact);toJson 有兩種常用模式Compact 和 Indented。Compact 是緊湊輸出不換行不加空格網(wǎng)絡(luò)傳輸一般用這個(gè)體積最小Indented 是格式化輸出帶換行和縮進(jìn)適合打印日志和寫配置文件。我見過有人把默認(rèn)的 Indented 格式直接發(fā)出去服務(wù)端也認(rèn)因?yàn)?JSON 規(guī)范本身允許空白字符但少數(shù)嚴(yán)格的服務(wù)端會(huì)拿 Content-Length 和實(shí)際接收體做一致性校驗(yàn)這種場景下 Compact 更穩(wěn)妥。發(fā) POST 請(qǐng)求時(shí)payload 必須先轉(zhuǎn)成 QByteArray 傳進(jìn)去。如果你直接傳 QJsonObjectQt 的重載可能會(huì)把它按表單字段處理服務(wù)端按 JSON 解析時(shí)什么都拿不到。QNetworkAccessManager manager; QNetworkReply *reply manager.post(request, payload);2.3 異步接收finished 信號(hào)與數(shù)據(jù)讀取post() 調(diào)用之后請(qǐng)求是異步的底層 socket 的讀寫不阻塞調(diào)用線程響應(yīng)到了之后通過信號(hào)通知。標(biāo)準(zhǔn)寫法是把回調(diào)接在 QNetworkReply 的 finished 信號(hào)上connect(reply, QNetworkReply::finished, this, [reply]() { if (reply-error() ! QNetworkReply::NoError) { qWarning() HTTP error: reply-errorString(); reply-deleteLater(); return; } QByteArray respData reply-readAll(); qDebug() raw response: respData; QJsonParseError parseErr; QJsonDocument respDoc QJsonDocument::fromJson(respData, parseErr); if (parseErr.error ! QJsonParseError::NoError) { qWarning() JSON parse failed: parseErr.errorString(); } reply-deleteLater(); });readAll() 的調(diào)用時(shí)機(jī)必須在 finished 之后在那之前讀可能讀到空數(shù)據(jù)或半截請(qǐng)求體。另外一個(gè)容易踩的細(xì)節(jié)是同一個(gè) reply 上的數(shù)據(jù)只能讀一次readAll() 之后內(nèi)部緩沖區(qū)就空了連續(xù)調(diào)第二次拿到的是空字節(jié)。不管請(qǐng)求成功還是失敗reply 最終都要 deleteLater() 釋放否則每次請(qǐng)求泄漏一塊內(nèi)存惡劣場景下跑一天內(nèi)存占用漲幾百兆。connect 時(shí)把 this 作為上下文對(duì)象傳進(jìn)去是一個(gè)值得堅(jiān)持的習(xí)慣。這樣當(dāng) this 指向的對(duì)象先被銷毀時(shí)lambda 不會(huì)再被觸發(fā)避免在回調(diào)里訪問懸垂對(duì)象導(dǎo)致崩潰。2.4 請(qǐng)求頭參數(shù)明細(xì)與常見誤設(shè)POST JSON 場景下請(qǐng)求頭直接影響服務(wù)端怎么解釋你的請(qǐng)求體這里集中列一張表Header 名推薦值說明Content-Typeapplication/json服務(wù)端按這個(gè)決定走 JSON 解析分支部分框架要求寫成 application/json; charsetutf-8Content-Lengthpayload.size()Qt 會(huì)自動(dòng)計(jì)算手動(dòng)設(shè)置更明確Acceptapplication/json期望服務(wù)端返回 JSONUser-Agent自定義字符串個(gè)別網(wǎng)關(guān)會(huì)攔空 UA 請(qǐng)求Connection不手動(dòng)設(shè)Qt 默認(rèn)支持 keep-alive手動(dòng)改反而多事兩個(gè)容易迷糊的點(diǎn)。第一所有 header 必須在 post() 之前設(shè)置完成先發(fā)請(qǐng)求再補(bǔ) header很可能不生效抓包看到的還是老請(qǐng)求頭。第二setHeader 和 setRawHeader 不要混著設(shè)置同一個(gè)字段繞來繞去容易產(chǎn)生兩個(gè)同名 header部分服務(wù)端看到重復(fù)頭直接報(bào)錯(cuò)。我在實(shí)際對(duì)接里就遇到過網(wǎng)關(guān)打印出兩個(gè) Content-Type 的情況排查半天發(fā)現(xiàn)是代碼里兩處都設(shè)了。3. JSON 組裝與解析嵌套結(jié)構(gòu)、數(shù)組與類型陷阱3.1 嵌套構(gòu)造對(duì)象套數(shù)組數(shù)組套對(duì)象真實(shí)業(yè)務(wù)里的接口很少只有三五個(gè)平鋪?zhàn)侄巍5卿浗涌诳赡軒б粋€(gè) user 對(duì)象上報(bào)接口通常是一個(gè) events 數(shù)組數(shù)組里每個(gè)元素又是一個(gè)獨(dú)立對(duì)象。QJsonObject 和 QJsonArray 可以互相嵌套寫法上先構(gòu)造內(nèi)層再組裝外層代碼會(huì)清晰很多QJsonObject userInfo; userInfo[uid] 10086; userInfo[nickname] dev; QJsonObject loginBody; loginBody[user] userInfo; loginBody[device] PC; QJsonArray events; QJsonObject ev1; ev1[type] click; ev1[page] /home; events.append(ev1); QJsonObject ev2; ev2[type] scroll; ev2[page] /list; events.append(ev2); loginBody[events] events;這段代碼最終生成的 JSON 結(jié)構(gòu)是{ user: {uid: 10086, nickname: dev}, device: PC, events: [ {type: click, page: /home}, {type: scroll, page: /list} ] }構(gòu)造時(shí)有幾個(gè)需要注意的行為。QJsonObject 的 operator[] 用于寫入時(shí)如果 key 不存在會(huì)自動(dòng)創(chuàng)建這對(duì)構(gòu)造是方便的但如果你想先判斷 key 是否存在再?zèng)Q定是否寫入要用 contains()。另外QJsonObject 內(nèi)部的組織順序在不同 Qt 版本之間并不一致官方也沒有承諾保持插入順序。如果你的業(yè)務(wù)依賴 JSON 字段順序來生成簽名比如某些支付接口要求把所有字段按字典序排序再拼串那就不要依賴 QJsonObject 的遍歷順序應(yīng)該拿到鍵名之后自己排序。3.2 防御性解析先判類型再取值服務(wù)端返回的 JSON 往往比請(qǐng)求要復(fù)雜得多。有的接口成功時(shí)返回 object失敗時(shí)返回 {code: 400, message: ...}還有的接口干脆返回?cái)?shù)組。解析端我強(qiáng)烈建議養(yǎng)成“類型先判斷、取值有兜底”的寫法QJsonParseError parseErr; QJsonDocument respDoc QJsonDocument::fromJson(respData, parseErr); if (parseErr.error ! QJsonParseError::NoError) { qWarning() parse error: parseErr.errorString(); return; } if (!respDoc.isObject()) { qWarning() response is not an object; return; } QJsonObject root respDoc.object(); if (root.contains(code) root[code].isDouble()) { int code root[code].toInt(); if (code ! 0) { qWarning() business error: root[message].toString(); return; } } if (root.contains(data) root[data].isObject()) { QJsonObject dataObj root[data].toObject(); QString token dataObj[token].toString(); } if (root.contains(list) root[list].isArray()) { QJsonArray list root[list].toArray(); for (const QJsonValue val : list) { if (!val.isObject()) continue; QJsonObject item val.toObject(); QString name item[name].toString(); } }這樣寫的好處是字段缺失和類型不符合都會(huì)被擋在門外不會(huì)因?yàn)橐粋€(gè)字段解析失敗導(dǎo)致整個(gè)響應(yīng)白拿。有一個(gè)容易誤判的地方value(code).toInt(-1) 這種寫法缺 key 時(shí)返回 -1但 key 存在且類型是 string 時(shí)toInt 可能返回 0 而不是 -1所以更穩(wěn)妥的判斷方式是先 contains 再取值。3.3 細(xì)節(jié)三件套緊湊格式、URL 編碼與小數(shù)精度第一件發(fā)送和打印用不同格式。發(fā)送時(shí)用 Compact 緊湊序列化日志里打印請(qǐng)求體時(shí)改用 Indented人眼更容易核對(duì)嵌套關(guān)系。同一個(gè) QJsonObject 可以隨時(shí)轉(zhuǎn)換兩種字節(jié)流不沖突。第二件URL 查詢參數(shù)編碼。很多接口要求在 URL 里帶簽名和時(shí)間戳如果簽名值里出現(xiàn) 、、 這類字符直接拼進(jìn) URL 會(huì)導(dǎo)致參數(shù)被拆分。正確做法是用 QUrlQuery 構(gòu)造QUrlQuery query; query.addQueryItem(app_id, demo); query.addQueryItem(sign, signStr); QUrl url(https://api.example.com/v1/order/create); url.setQuery(query);QUrlQuery 會(huì)自動(dòng)完成百分號(hào)編碼服務(wù)端解碼后拿到的值和本地計(jì)算一致。第三件小數(shù)精度。QJsonValue 對(duì)數(shù)字只區(qū)分 double 和整數(shù)如果你從 double 填進(jìn) QJsonObject接收端拿到的就是帶小數(shù)的值。涉及金額計(jì)算時(shí)浮點(diǎn)誤差會(huì)累積建議約定以“分”為單位的整數(shù)來傳避免兩個(gè)端對(duì)不上賬。4. 同步等待與超時(shí)控制既要結(jié)果同步也要死等可控4.1 QEventLoop 把異步請(qǐng)求改成本地等待Qt 的 HTTP 請(qǐng)求本質(zhì)是異步的但很多業(yè)務(wù)邏輯是線性的先登錄拿 token再帶 token 請(qǐng)求數(shù)據(jù)。拆成信號(hào)槽一層層回調(diào)也能寫但回調(diào)嵌套多了以后可讀性和排錯(cuò)成本都會(huì)上升。一個(gè)常見的做法是借用 QEventLoop 把“異步請(qǐng)求 等待完成”包裝成同步函數(shù)。這個(gè)寫法適合命令行工具、后臺(tái)任務(wù)線程這類場景。注意如果跑在 UI 線程進(jìn)入事件循環(huán)會(huì)阻塞界面刷新用戶看到的就是界面卡死所以 GUI 程序里不要在主線程做這種同步等待。QByteArray postJson(const QJsonObject body) { QNetworkAccessManager manager; QNetworkRequest request; request.setUrl(QUrl(https://api.example.com/v1/rpc)); request.setHeader(QNetworkRequest::ContentTypeHeader, application/json); QByteArray payload QJsonDocument(body).toJson(QJsonDocument::Compact); QNetworkReply *reply manager.post(request, payload); QEventLoop loop; QObject::connect(reply, QNetworkReply::finished, loop, QEventLoop::quit); QTimer timer; timer.setSingleShot(true); QObject::connect(timer, QTimer::timeout, reply, QNetworkReply::abort); timer.start(3000); loop.exec(); QByteArray result; if (reply-error() QNetworkReply::NoError) { result reply-readAll(); } reply-deleteLater(); return result; }這里的關(guān)鍵設(shè)計(jì)是超時(shí)觸發(fā)時(shí) abort 中斷請(qǐng)求隨后 reply 的 finished 信號(hào)依然會(huì)發(fā)出來把 loop 的 quit 兜住不會(huì)出現(xiàn)死等。如果只等 finished 而不管超時(shí)遇到服務(wù)端遲遲不響應(yīng)線程就真的掛死了。deleteLater 放在 loop.exec() 返回之后執(zhí)行是安全的因?yàn)榇藭r(shí)請(qǐng)求已經(jīng)結(jié)束或者被 abort。4.2 超時(shí)設(shè)置setTransferTimeout 與單請(qǐng)求兜底如果你用的是 Qt 5.15 及以上版本QNetworkAccessManager 自帶 transfer timeout按毫秒設(shè)置manager.setTransferTimeout(5000);這個(gè)超時(shí)對(duì)該 manager 后續(xù)所有請(qǐng)求生效。需要注意它的語義它是指“無數(shù)據(jù)活動(dòng)超時(shí)”不是“整個(gè)請(qǐng)求的總時(shí)限”。也就是說一個(gè)請(qǐng)求持續(xù)在傳數(shù)據(jù)哪怕已經(jīng)跑了 30 秒它也不會(huì)被掐斷。這和很多服務(wù)端框架里的“總超時(shí)”概念不完全一樣對(duì)接時(shí)要心里有數(shù)。Qt 5.15 之前的版本沒有這個(gè)接口更早版本的兼容做法就是第 4.1 節(jié)里那樣用單次 QTimer 配合 reply-abort()。有一個(gè)常見的誤用在 QTimer 的槽里直接調(diào) loop.quit()而不是先 abort。表面上循環(huán)退出了但請(qǐng)求還在后臺(tái)繼續(xù)跑后續(xù) finished 信號(hào)仍然會(huì)觸發(fā)線程退出時(shí)可能帶出一堆“connection closed”之類的噪音。還有一個(gè)值得避免的寫法不要在一個(gè) QEventLoop 里再嵌套另一個(gè) QEventLoop 去等新的 HTTP 請(qǐng)求。我見過有人在 finished 回調(diào)里又起一個(gè)新的 loop 去等下一個(gè)管理器的請(qǐng)求理論上能跑但其中一個(gè)超時(shí)沒兜住整個(gè)線程就僵住不動(dòng)。連續(xù)多段請(qǐng)求的正確做法是把它們串成隊(duì)列或者像第 2 章那樣用異步回調(diào)鏈。5. 避坑與排查POST JSON 最常翻車的五個(gè)現(xiàn)場5.1 服務(wù)端收到空 bodyContent-Type 與序列化格式?jīng)]對(duì)上現(xiàn)象接口返回 HTTP 200但服務(wù)端業(yè)務(wù)日志顯示收到的 body 是空的或者字段全是 null。原因最常見的有三種。第一post() 時(shí)直接傳了 QJsonObject沒有先 toJsonQt 按表單編碼處理服務(wù)端走 JSON 解析自然拿不到。第二Content-Type 沒設(shè)或者設(shè)成了 text/plain服務(wù)端沒走 JSON 解析分支。第三URL 拼錯(cuò)導(dǎo)致請(qǐng)求打到了另一個(gè)接口上這個(gè)在 5.5 節(jié)單獨(dú)說。解決把 payload 先用 qDebug() 打印出來確認(rèn)它是一段合法 JSON再確認(rèn)請(qǐng)求頭里的 Content-Type 是 application/json最后在調(diào)試代理里看實(shí)際發(fā)出的 body 內(nèi)容判斷丟在哪一環(huán)。5.2 返回中文亂碼或 \uXXXX編碼和解碼不在同一條鏈上現(xiàn)象響應(yīng)里的中文變成“錕斤拷”之類的亂碼或者所有中文都變成 \uXXXX 轉(zhuǎn)義串。原因HTTP 響應(yīng)頭沒有聲明 charset 時(shí)Qt 默認(rèn)按 UTF-8 讀取如果服務(wù)端返回的是 GBK讀出來就是亂碼。\uXXXX 其實(shí)是 JSON 規(guī)范里的標(biāo)準(zhǔn)轉(zhuǎn)義不代表數(shù)據(jù)錯(cuò)誤只是還沒解碼顯示。解決先看原始字節(jié)。遇到亂碼先不要急著接 QJsonDocument先打印原始響應(yīng)或按十六進(jìn)制看字節(jié)確定服務(wù)端實(shí)際編碼。如果是 GBKQt 5 里可以用 QString::fromLocal8Bit 或 QTextCodec 的 GBK codec 轉(zhuǎn)成 Unicode再喂給 fromJson。Qt 6 里 QTextCodec 挪到了兼容模塊接口對(duì)接文檔里一般會(huì)注明。5.3 HTTPS 證書驗(yàn)證失敗本地調(diào)試與正式環(huán)境要分開對(duì)待現(xiàn)象請(qǐng)求本地開發(fā)環(huán)境的 HTTPS 接口時(shí)報(bào) SSL handshake failed 或者 certificate signed by unknown authority。原因本地聯(lián)調(diào)的 HTTPS 服務(wù)大多使用自簽證書Qt 默認(rèn)的證書鏈校驗(yàn)不認(rèn)這個(gè)證書。解決開發(fā)環(huán)境可以臨時(shí)放行。比較穩(wěn)妥的做法是連接 reply 的 sslErrors 信號(hào)在回調(diào)里打印出錯(cuò)信息然后調(diào)用帶參數(shù)版本的 ignoreSslErrors只放行當(dāng)前這幾條錯(cuò)誤不要無腦調(diào)用無參版本把未來所有證書錯(cuò)誤全部忽略。這個(gè)妥協(xié)手段只適合本地調(diào)試測試和正式環(huán)境必須走正規(guī)證書鏈否則中間人改數(shù)據(jù)沒有任何提醒安全邊界形同虛設(shè)。5.4 reply 泄漏與隨機(jī)崩潰生命周期沒理順現(xiàn)象程序運(yùn)行一段時(shí)間后隨機(jī)崩潰崩潰棧指向 QNetworkReply 相關(guān)或者內(nèi)存占用持續(xù)上漲。原因reply 沒有按規(guī)矩 deleteLater每次請(qǐng)求泄漏一點(diǎn)內(nèi)存另一種隱蔽情況是在兩次事件循環(huán)里對(duì)同一個(gè) reply 調(diào)了多次 deleteLater第二次就是懸垂操作。解決統(tǒng)一在 finished 回調(diào)里先讀數(shù)據(jù)、再 deleteLater絕不在 finished 之前刪除 replylambda 捕獲的 reply 指針一定要在連接銷毀前保持有效。connect 時(shí)帶上上下文對(duì)象比如 connect(reply, QNetworkReply::finished, this, lambda)一旦 this 對(duì)象先銷毀回調(diào)自動(dòng)斷開能規(guī)避一大批懸垂崩潰。5.5 請(qǐng)求沒有響應(yīng)先查 URL 編碼和 JSON 合法性再查事件循環(huán)現(xiàn)象POST 發(fā)出去之后什么回調(diào)都不觸發(fā)程序不報(bào)錯(cuò)也不崩潰就像請(qǐng)求被黑洞吞了。原因常見兩種。一是 URL 帶了未編碼的中文或特殊字符QNetworkAccessManager 對(duì)非法 URL 的處理很安靜沒有顯式錯(cuò)誤信號(hào)表現(xiàn)就是沒任何回調(diào)二是代碼跑在一個(gè)沒有事件循環(huán)的線程里QNetworkAccessManager 的信號(hào)派發(fā)依賴事件循環(huán)循環(huán)不跑finished 永遠(yuǎn)不會(huì)觸發(fā)。解決第一步把 URL 打印出來確認(rèn) setUrl 前已經(jīng)做了百分號(hào)編碼第二步檢查當(dāng)前線程有沒有事件循環(huán)沒有就換到有循環(huán)的線程或者用第 4 章的同步等待方式第三步給請(qǐng)求加兜底超時(shí)確保任何情況下都不會(huì)無限等下去。6. 收尾建議把 POST JSON 封裝成公共調(diào)用工具6.1 封裝一個(gè)帶回調(diào)的 postJson最后一個(gè)建議把項(xiàng)目里所有 POST JSON 的調(diào)用收斂到一個(gè)公共位置不要散落在各個(gè)界面類里。通常我會(huì)封裝一個(gè) HttpManager 類內(nèi)部持有唯一的 QNetworkAccessManager對(duì)外只暴露一個(gè) postJson 接口加上完成回調(diào)void HttpManager::postJson(const QUrl url, const QJsonObject body, std::functionvoid(QJsonObject, int) done) { QNetworkRequest req(url); req.setHeader(QNetworkRequest::ContentTypeHeader, application/json); req.setRawHeader(Accept, application/json); QByteArray payload QJsonDocument(body).toJson(QJsonDocument::Compact); QNetworkReply *reply m_manager.post(req, payload); connect(reply, QNetworkReply::finished, this, [reply, done]() { QJsonObject respObj; int status reply-attribute( QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (reply-error() QNetworkReply::NoError) { QJsonParseError err; QJsonDocument doc QJsonDocument::fromJson(reply-readAll(), err); if (err.error QJsonParseError::NoError doc.isObject()) { respObj doc.object(); } } done(respObj, status); reply-deleteLater(); }); }這樣外部調(diào)用只需要關(guān)心數(shù)據(jù)組裝和結(jié)果回調(diào)網(wǎng)絡(luò)細(xì)節(jié)全部收進(jìn)類里。6.2 日志、狀態(tài)碼與簡單重試在封裝基礎(chǔ)上我會(huì)再加兩條習(xí)慣。第一請(qǐng)求發(fā)出時(shí)打一行“方法 URL payload”日志響應(yīng)收到后打一行“狀態(tài)碼 錯(cuò)誤串 耗時(shí)”排查問題不再需要臨時(shí)加調(diào)試語句。第二加一個(gè)簡單重試失敗且狀態(tài)碼是 5xx 或網(wǎng)絡(luò)錯(cuò)誤時(shí)重新調(diào)用 postJson最多重試兩次每次間隔 300 毫秒覆蓋大多數(shù)偶發(fā)超時(shí)和瞬時(shí)抖動(dòng)。另外如果是 Qt 5.15 以上給 manager 設(shè)一次 setTransferTimeout(8000) 做全局兜底比每個(gè)請(qǐng)求單獨(dú)開定時(shí)器省心GUI 程序優(yōu)先走異步回調(diào)腳本和后臺(tái)線程再考慮 QEventLoop 同步等待。我從做第一個(gè) Qt 網(wǎng)絡(luò)模塊的模擬項(xiàng)目開始每次接口對(duì)接都強(qiáng)制走一遍自檢鏈先打印請(qǐng)求報(bào)文再核對(duì) Content-Type然后確認(rèn) reply 生命周期最后看響應(yīng)原始字節(jié)。這套流程讓我少踩了無數(shù)坑現(xiàn)在新項(xiàng)目第一天就把 HttpClient 封裝好后面每個(gè)接口只改 JSON 結(jié)構(gòu)和回調(diào)邏輯翻車率低了很多。希望幫你把 POST JSON 這條路走順。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久久久久久久久久久黄色 | 日韩影片中文字幕一区二区三区| 久久久日本电影| 久热色情精品| 婷婷综合网站| 亚洲AV噜噜狠狠网址蜜桃动漫| 色在线69堂| 色情婷婷| 日本污ww视频网站| 岛国网址国产| 强奸乱伦AV网址| 97操b| 91高跟美女在线播放| 久久久久13| 国产三级日产三级韩国三级| 亚洲第一黄色av网站| 亚洲日韩国产精品| 人人爱人人乐人人操| 欧美精品亚洲精品日韩传电影| 加勒比大香蕉视频在线| 婷婷五月成人| 九九久久一区二区三区| 亚洲色图欧美色图制服丝袜| 密臀在线免费观看| 在线视频五十市| 天天91~综合入口| 中亚av| 五月天色图| 久久久久久人妻| 综合色色婷婷| 99re3这里只有精品| 伊人成人中文字幕久久网| 91狠狠色丁香婷婷综合久久精品| 99re国产中文字幕| 97超碰色屌| 丁香婷婷激情五月天无毒不卡| 欧美色图片91| 97超碰免费生活| 51一区二区三区| 久久成人东京热人妻| 熟女五十路一区二区三| 热G综合热G中文| 91热热色| 少妇内射www在线观看视频| 日本黄色大片一级视频免费麻豆| 亚洲精品一区二区精品| 青青草在线视频人人想人人上| 日本操嫩b网| 日韩一级二级三级| 精品中文字幕一区二区| 亚洲各类熟们中文字幕| 看看小穴| 亚洲另类色综合网站| 成人久久久| 成年人黄色小视频网站| 久久久久骚| 国产白丝在线| 看免费的黄片| 99re视频在线观看这里只有精品| 亚洲男人的天堂在线看| 亚洲爽图| 日韩乱码Av| 国产女主播视频在线观看| 亚洲色电影在线| 亚洲人妻中文高清| 天天激色| 伊人久久大香线蕉无码| 97内射偷拍| 亚洲欧美色图片| 日本久久天堂| 日韩内| 操逼视频亚洲| 欧美综合中文| 97人肏| 97综合久久| 色噜噜国产在线| 96精品久久久久久久久| 啊啊啊97视频| 入口操逼网站| 日本久久女同性恋视频| 91久久18禁| 波多野结衣先锋影音| 99青青草国产视频| 天天插天天操| 免费岛国一级片| 曰本91情色| 色综合久| 亚洲啪AⅤ永久无码| 久久草视频污视频| 99精彩视频| 无码人妻精品酒店| 激情文学小说一区二区| 久久精品一区二区三区不卡| 日韩黄片影院| 欧美 色 亚洲| 久久久精品久久| 红杏大香蕉| 任我爽视频在线观看| 亚洲美腿丝袜香蕉影视欧美成人| 韩国手机不卡无码三级视频| 丝袜熟女一区二区三区| 日韩在线观看AV| 极品色www影院| 天天干天天拍| 操逼逼中文字幕| 精品无码少妇| 婷婷久草| 色综合超碰超| 欧美熟妇人体| 精品91摸| 特污免视频| 国产精品探花视频| 色y情视频免费看| 欧美一品道| 91啪9色| 99综合视频一体| 尤物视频一区| 欧美大香蕉同搞| 中文字幕丰满人妻日本| 91亚洲欧美激情| 夜夜国自区| 91综合国产精品| 超碰 另类 欧美| 五月综合色| 日韩在线观看中文字幕视频| 久9视频| 国产成人无码久久精品| 日韩精品一区二区日韩| 欧美黄色大片在线观看 | 亚洲A曰本VA欧美VA视频| 国产嫩草精品A88AV| 日韩无码久久熟女一级片| 爱欲AV| 91在线美女| 91在线综合网| 97丝袜亚洲在线播放| 91五月天| 成人性交午夜免费片| 99中文字幕| 在线视频97| 曰韩中文人妻视频| 手机在线中文字幕国产 | 天天视频综合在线观看视频| 亚洲砖码砖专无区2023| 国产av尤物| 熟啊v色欧美热| 一区二区三区色综合| 蜜桃臀一区二区三区久久| 撸无码不卡免费视频| 久久久偷拍| 日韩日本欧美在线观看| 亚洲欧美精品福利在线| 人妻久热在线| 日韩av电影网站| 射综合网| 色综合色综合网| 久久久99久9| 亚洲性爱高潮影院| 欧美亚洲高清不卡| 日韩熟女三十乱伦| 丁香六月激情| 男人天堂最新手机版在线青青草| 九九九热| 激情婷婷| 伊人在线大香蕉二。| 欧美激情综合| 亚洲色啪| 99最新日韩偷拍视频| 男女一进一出视频久久| 亚洲一区二区三区四区视频| 午夜性| 精品十八在线观看| 大地资源在线观看中文第二页| 色婷婷aV一区二区三区麻豆综合| 国内毛片四区| 黑人黄片在线免费观看| 精品久久9| 永久免费av无码网站国产app | 五月天色图影视| 丁香九月激情| 少妇丝袜在线观看AV| 看大黄色大片原件| 久久爽爽精品| 人妻熟女字幕一区二区| 大香蕉伊人网WWWn0n| 探花激情视频| 无码WWW免费视频网站| 天天干,夜夜爽| 日韩欧美成人综合在线| 97伦综合| 破处bbq| 国产日韩美女小穴视频网站不卡| 中文字幕一区二区视频在线观看| 人干人人人操人人摸| 99热精品在线| 少妇熟女视频一区二区三区| 第四色奇米影视777| 国产精品99久久久www| a在线视频免费观看| 成人一级性爱| 偷拍亚洲情色| 亚洲天堂情色| 英伦大奶子熟妇吊带| 香蕉久久国产AV一区二区| 国产精品久久99日日| a片在线播放| 99久久久久久亚洲精品不卡| 秋霞色色影院| 一区二区三区美女超清| 国产二区三区免费视频| 国产精品黑人一区二区三区| 日本人妻最新在线中| 欧美91变态| 久热这里只有精品9| 亚洲色图日韩丝袜制服一区二区五月在线| 亚洲偷拍欧美激情| 久操视频在线| 国内外激情在线| 91熟女视频网| 操操操五月天婷婷丁香影院| 国产福利视频精品视频| 一区二区影院| 亚洲综合激情五月久久| 青草青青久久久久久国产| 亚洲天堂综合AV| 欧洲天天在线| 日本天天干天天搞一区| 日本天天干天天搞一区| 97ai亚洲| 亚洲AV无码乱码| 青娱乐欧美激情一区二区 | 黄色二级片网站| 久久久9品一区二区三区| 亚洲瓯美色图| 久久视频,这里只有精品| 日韩有码回春沙龙第一页| 97在线亚洲| 国产sv美女内射| 美女被啪到深处抽搐视频| 国产美女销魂在线观看不卡| 国产精品自拍欧美在线| 日韩国语字幕| 青青草字幕AV| 国产精品剧情| www.色操逼| 亚洲情色婷婷五月天| 在线天堂999| 国产精品久久久久久9999| 亚洲欧美清纯| 日韩激情啪啪啪| www.狠狠| ai欧美亚洲小说| 美欧色综合| 综合五月婷婷亚洲一区| 伊人成人中文字幕久久网| 97超碰久| .精品人妻一区二区三| 97任你吞精| 蜜臀精品1区2区| 夜夜操夜夜高潮夜夜爽国产精品区| 清纯唯美第一页| 人妻精品免费一二三区| 91粉芽高清在线一区二区| 欧美页片| V A在线| 在线国产福利网址导航| 嗯嗯嗯啊啊啊操的我好爽| 大干人妻| 超碰成人最新最好看| 久9久| 91痴汉| 国产二区三区免费视频| 久久精精区一区二区一蜜桃一区二区| 99re在线视频| 欧美 日韩 亚洲 春色| 97WW精品| 精品国产乱码久久久久久蜜臀| 国产人伦a片信息免费片| 久热伊人99re| 男人的午夜天堂| 国产一区二区啪啪视频| 欧美日韩97在线| 国产亚洲日韩欧| 麻豆人妻精品一区二区| 亚洲第一页综合在线| 日韩人妻一二三区视频| 丁香五月天久久精品视频一区二区三区| 丝袜加勒比| 久久99人妖视频国产| 日韩不卡码| 欧美日韩国产成人高清| 美骚妇av高清在线| 国产精品制服丝袜清纯唯美| 中文字幕伊人| 射欧美综合| 少妇天堂| 看看小穴| 中文字幕日韩专区精品系列| 国产精品天干天干综合网麻豆| 日本成熟少妇A∨网站| 95人妻爽爽人人做人人澡| 91亚洲欧美激情| 麻豆久久久一区二区| 亚洲精品91| 欧美极品女人的天堂| 一区二区影视| 91在线免费观看处女| 天天视频网站黄| 精品一区二区麻豆| 在线无码操| 蜜桃臀AV在线| 丁香五月激情综合| 自拍偷拍第26| 久艹视频在线| 98一区二区精品| TS人妖另类精品视频系列| 蜜桃久久久久久久| 操逼www.| 性感美女91影视| 黄色污污污污污污网站| 情趣丝袜无码操逼视频| AV天黑人| 一个人在线看的黄色电影网站| 无码外流操逼视频| 日韩精品三级| 久偷拍| 天天做日日爱夜夜爽| 欧美日韩人妻精品系列一区二区三区| 日本有码久久| 亚卅熟女乱色| 色哟哟AⅤ| 国产免费一区| 美女诱惑1区2区| 亚洲天堂一区二区久久| julia国产在线| 91色综合激情| 综合啪啪| 亚洲 日本 国产 综合| 一区二区三区四区五区久久久久久| 激激五月| 欧亚在线视频| 国产9 9在线 | 亚洲| 一卡二卡在线播放| 久久久网一区| 蜜臀精品1区2区| 永久免费发布性爱网| 97se亚洲综合自| 久久久18禁| 欧美日韩国产在线| 日韩av在线播放不卡| 99婷婷一区二区| 亚洲图片欧美偷拍| 中文字幕精品亚洲熟女| 狠狠做深爱婷婷久久二区| 日韩免费人妻色情网站| 国产一区二区在线电影| 久久男人精品| 亚洲国产欧美一区二区潘金莲 | 天天干天天操天天干天天操| 妇女性内射冈站HDWWWCOM| 九九九精品美女| 大屁股熟女一区二区三区| 亚洲欧美日韩有码| 素人美腿视频网站| 国产亚洲人妻综合日韩 久久| 日韩精品中文字幕一| 日韩三级在线观看网站| 先锋女优在线观看视频| 日操粉逼逼| 丝袜美腿亚洲| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 狠狠爱夜夜干| 日韩欧美中文字| 久久999久| 亚洲永久永久永久永久一级一级一级精品 | 亚洲第一页欧美| 97超碰国产亚洲精品资源| 色九九综合| 自拍大香蕉乱插| 欧美日韩国产中文精品字幕自在自线| 亚欧日韩成人| 日韩无码专区| 久久伊人大香蕉| 久久露脸国产老熟女| 精品一二三区久久AAA片| 人人 操人人 操人人| 无码人妻精品一区二区三区99不卡| 精品无码秘 人妻一区二区| 久久精品—区二区三区内射| 97视频在线播放| 91美女小视频| 在线αⅴ| 一区二区三区成人高清视频| blacked精品一区国产| 国产成人亚洲精品无码古代早漏男| 亚洲一区二区三区不卡国产欧美| 国产精品自拍xxxx| 一区二区三区欧美激情| 大香樵伊人网| 78p欧美| 精国久久一区二区三区98| 色男人色天堂东京热| 91爱做| 国产超碰97| 亚洲中文字幕一区二区| 午夜男女爽爽爽影院视频| 日熟女| 操逼逼中文字幕| 日本www操操操| 看一级黄色视频| 一道本久久棕合爱| 国产视频大全| 国产精品播放| 在线岛| 337p大胆噜噜噜噜噜91Av| 婷婷丁香六月| 99蜜桃臀久久久欧美精品网站| 欧美激情黑人| 一区二区三区美女超清| 久久丁香五月婷婷| 熟女天天干| 自拍啪啪视频| 精品人妻中文字幕4399| 成人短视频在线观看| 欧美亚洲性爱一区二区| 日日碰视频网| 中文字幕啊啊啊在线观看视频| 欧美久久九九| 热G综合热G中文| 欧美极品美女aaaaaa级黄片| 亚洲欧美精品福利在线| 国产中文福利| 亚洲欧美日韩制服另类| 欧美激情综合色综合啪啪五月| 二对二中文字幕。| 好属操| 福利视频一区二区微拍| 麻豆福利视频导航| 啊啊啊想要| 国产精品一区二区 尿失禁| 96久久科窝| 人妻丰满熟妇av无码区蜜桃| 美国aaaaa一级黄片| 人人喜人人妻| 91一区二匹| 一区二区娱乐网站| 4虎在线视频| 国产精品一区二区亚洲人成毛片| 天天干天天爽| 丝袜美腿操av| 日本国产欧美高清在线| 久久久久9999妇女| 精品欧美不卡在线播放| 天综合中文| 操熟女91| 九九热最新| 久久国产精品视频| 无码国产精品午夜不卡(| 亚洲91大片| www.伪伪| 欧美78| 人人干黄色| 免费的av网| 欧洲久久一二线| 九九Av| 91模特在线观看| 5278欧美一区二区三区| 97操综合| 五月丁香综合激情| 一二三区精品视频| 91校园春色长篇| 神马麻豆福利院 | www久久精品| 操逼片中文| 九久久精品| 超碰成人国产| 免费视频一二三区| 亚洲色欲一区二区三区| 26uuu最新| 亚洲乱色视频一区、二区在线| 18禁止看精品中文字幕| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 色婷婷丁香五月天| 中文字幕后石码四区五区| 亚洲有码 视频一区| 日韩性爱啪啪视频| 欧美在线视频播放| 超碰91在线| 国产精品日日摸夜夜添骚逼| 黄色高清久久无码依人| 秋霞久久亚洲精品成人| 四虎午夜影院| 日韩啪啪啪视频| 人妻人人做人人澡人人爽欧美一区| 日韩亚洲97| 久热9| 思思久热在线精品66| 国产农村妇女精品一二区| 夜夜天天噜狠狠爱2021| 9久久久久久| 男人天堂.AB| 九九精品99| 超碰97综合网| 久久e6只有精品| 粉嫩不卡一区二区性爱| 97国产精品视频| 1204金沙人妻懂旧版免费| 秋霞一级视频在线观看免费| 曰韩人妻中文字幕在线 | 伊人久久在线视频观看| 日韩精品午夜操呦呦不卡影院 | 女欧美一区二三区| 91欧洲入口| 中文字幕在线观看第二页| 狠狠操夜夜| 欧美97| 久久视频少妇美女| 99热这里只有精| 欧美性巨大╳╳╳╳╳高跟鞋| 久操免费观看| 91美女高潮| 97干色天堂| 久久久97| 午夜久久无码1000合集| 91精品人妻偷情| 精品美女少妇一区二区| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 精品亚洲国产成人AV制服丝袜 | 97人人射| 久久无码电影| 在线播放免费av福利片| 日本精品五区| 久一区久久蜜桃| 欧美九一精品久久久熟妇| 美女97超碰| 日韩97超碰中文字幕| 殴美大黄片| 免费观看网黄| 精品人妻一区二区三区四区石在线| 九九九不卡| 69丨亚洲丨精品丨入口免费播放| 精产国品一区二三产品| 成年男人的天堂| 99热这里都是精品| 99ri在线视频| 99综合免费视频| 亚洲综合精品国产一区| 91艹B视频| 四虎国产精品永久地址入口| 日本成人免费一区二区三区| 天天草天天日| 91精品无码久久久久久久| 99国产精品| 婷婷激情四射| 国产欧美另类久久久精品课程| 九九人妻| 上床啊啊啊| 青青青在线高清视频在线一二三四区| 大香蕉手机在线| 性欧美| 婷婷人妻激情| 玖玖综合网| 亚州一区二区| 乱伦熟妇一区二区| 一二三四免费视频| www.91色综合| 啊a一区在线| 少妇与黑人高潮在线| 亚洲A色| 久久久久久波多野吉衣高潮| 欧美影音在线| 热热色青青草| 啊啊啊啊网站| 无遮挡一级毛片视频免费的| 蜜乳AV一区| 5278欧美一区二区三区| 久9视频| 伊人影院中文字幕| 精品十三区| 中文字幕在线2| 人人九九精| 99精品人妻| 国产欧美在线观看免费观看| 人人操人人干网页| 婷婷丁香五月激情啪啪| 97爱爱爱综合| 人妻免费观看| 国产97亚洲| 久久草草亚洲蜜桃臀| 一区二区三区成人高清视频| 国内三级自拍小视频在线观看| 一区二区激情国产熟女 | 男女日B国产| 亚洲第2页| 久久久久久午夜男人的天堂| 欧美狠狠操| 久草成人影片| 日本伦乱九九九综合| 黄色小视频日本txt| 亚洲黑丝在线| 久久久九精品| 91肉片| 超碰人人超在线观看| 天美av在线观看| 亚洲资源网| 久久精品黄色| 一级啊性爱在线视频| 91蜜臀熟女| 91熟女.com| 亚洲一区中文精品| 色婷婷丁香五月天| 传媒免费一区二区三区| 女人天堂av在线播放| 午夜电影在线观看无码专区| 97网址www| 91成人亚洲色图| 成人日韩3| 天美国产精品| 欧美色九九| 日韩欧美tv一区二区在线观看| 夜夜嗨一区二区| 偷拍欧美亚洲| 能直接看AV的网站| 中文幕97| 91伊人久| 中文字幕一二三区| 日韩精品-原创伙伴| 亚洲蜜桃V妇女| 91久久18禁| 91视频精品| 天美国产三级传媒| 97亚洲在线| 国产日比| 亚洲少妇视频| 人看人人摸人人操| 亚洲高清欧美总合| 国产精品懂色tv影视免费观看| WWW操逼| 99自拍视频| 99热18这里只有精品| 高清国产精品福利网站| 色婷婷丁香五月| 91青青在线视频| 亚洲97成人在线观看| 欧美99| 亚洲 欧美 色图| 久操网视频| 97超碰色屌| 小说区 图片区色 综合区| 综合色播| 国产精品对白自产拍| 天天干夜夜操网| 欧美激情片一区二区| 蜜桃狠狠色伊人亚洲综合网站| 欧美精品自慰系列寂寞少妇| 免费超碰97久久| 岛国色情视频在线观看| 国产精品欧美激在线| 成人精品在线免费视频| 极品五月天噜噜| 亚洲风情在线观看| 五月天伊人| 青青草公开在线免费不卡视频| 亚洲制服欧美另类内射| 天天超级碰碰碰| 综合五月婷婷亚洲一区| 欧美国产一区二区三区麻豆传媒| 在线观看亚洲成人精品| 抽查国产福利主播| 亚洲不卡三级手机播放| 偷拍亚洲高清图片| 操b在线观看| 插老姨肥穴| 久久精品福利影院| 五毛骚逼极品美女怕怕| 91GD.COM| 国产综合色精品在线观看| 欧亚第一综合网| 日本色色色视频| 久久精品28| 狠狠搞 亚洲91| 精品v日韩欧美国产| 国内毛片四区| 欧美操逼视频二区| 97最新在线播放视频| 粉嫩av在线| 亚洲综合性网址| 国产无马av| 波多野42部激情无码喷潮| 亚洲偷拍欧美激情| 亚洲天堂另类美腿| av无码精品久久久久| 超碰91在线| 中文久久96| 夜夜爽爽爽| 美国一区二区三区视频| 国产精品国产精品国产| 亚洲色情在线影视| 不卡超碰护士AV在线免费播放| 自拍视频一区在线观看| 精品无吗m| 91精品国久久久久久无码| 成人 日韩欧美一区| 91碰超| 久操视频在线观看| 中文字幕熟女人妻丝袜丝| 天天综和| 婷婷五月天基地| 无码高清专| 国产美女在线精品免费看| 综合色久欲| 热热热热日日漂亮永久永久国产日| 九九色热| 熟女突然公开看18禁影片 | 嗯啊不要在线观看嗯啊| AV免费在线播放一区| 一级性爱视频免费观看| 抽插亚洲无码| 加勒比无码毛片| 99精品人人爽| 日韩懂色网| 热久久91婷婷| 男人天堂2012| 97人人草| 99热网站| AA丁香综合激情| 一区二区三区机械有限公司| 久久6热视频免费观看| 蜜乳AV.COM| 欧美日韩大香蕉| 亚洲综合20p| 亚洲激情视频| 91美女小视频| 精品福利| 欧美999| 精品九九九九九| 国产馆| 欧美碰碰综合色| 91色欧美| 天天日天天干少妇日| 午夜啊啊| 欧美激情区| 九热久| 97天天| 国产白丝精品在线观看| 尤物av网站免费在线播放| 国产老太乱伦一区| 国产日韩精品suv| 精品无码欧美三级| 性爱视频啪啪啪啪| www.av在线视频| 久久久久亚洲?V片无码V| www.99中文字幕| 一区三区啪啪| 色五月婷婷网| 久久久999日本大片| 亚洲一二三四区机械| 欧美情色贴图| 亚洲色图第一页| 色色97爱| TS人妖另类精品视频系列| 国产毛片片精品天天看视频| 中文字幕人成乱码熟女香港| 在线观看AV片| aaa一级黄片| 亚洲有码 欧美精品| 黄色成品网站| 久久亚洲色图中文字幕| KK色在线影院| 欧美色亚洲| 高清一区AV无码| 亚洲国产欧美中日韩成人综合视频| 色婷婷电影网| 亚洲另类色图片| 97欧美久久久久久久| 78操B| 国产精品久久久无码aV去| 蜜乳AV一区二区三区四| AV 少妇 人妻 偷拍| 97超碰色屌| 亚洲丝袜二区在线| 国产欧美在线观看免费观看| 国产AV激情无码久久无码 | 精品性爱久久视频| 亚州欧美另类| 双插性欧美一二三区| 337p大胆噜噜噜噜噜91Av| 夜夜高潮夜夜爽高清视频一 | 中文人妻av高清一区| 国产67194| 精品性爱久久视频| 亚洲欧美黄| 日本操逼二区| 国产白嫩精品久久| 日本布卡一区二三区| 国产久久免费精品视频| 99视频内射三四| 久啪| 很很操在线| 九月丁香| 四虎影视永久在线观看精品免费网站| 七月婷婷综合| 丁香五月婷婷基地| 欧美色综合图片| 韩国免费播放一级毛片| 婷婷伊人綜合中文字幕| 欧美性天天影院| 粉嫩av平台| 亚洲情色电影网| 欧美最婬乱婬爆婬牲视频| 天天插夜夜操| 国产13区| 大香蕉欧美| 亚洲五月天激情| 亚洲第一页综合在线| 亚洲欧洲综合成人av一区| 伊人天堂在线| 999热这里只有精品| 欧日a| 北野未奈加勒比av| 日韩欧美成人性爱在线| 夜夜操av亚洲一区二区| 人妻丝袜美腿中文字幕| 婷婷五月天网| 少妇大屁屁| 久久久97| 中文字幕av片| 操逼网免费无码视频| 欧美一区二区三区黄色影视| 国产美女裸体秘 永久无遮挡| 刺激性视频黄页| 一级毛片电影免费看| 精品超碰中文在线| 高清视频一区| 色老汉玖玖爱| 中文字幕乱码在线| 欧美亚洲综合色| 亚洲色图欧美激情| 丰满人妻一区二区三区在线| 亚洲啪啪综合?v一区综合精品区| 中文字幕黑人大片| 亚洲另类天堂| 国产精品经典一卡久久久| 色吧5亚洲| 久久成年精品| 九九精品99| 亚洲色图 图片| 久久6热视频免费观看| 中文字幕二区| 精品少妇一区二区三区在线视频| 亚洲天堂电影网99999| 九九亚洲视频| 91日韩| 精品视频97| 日韩探花精品在线视频| 人人九九精| 丁香五月综合| 国产精品女aA片爽爽视频| n1038 一二三区| 很黄很色的视频在线观看| 亚洲美女黄色| 九九久久99| 69XX一中文字幕人妻91| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 久久精品国产亚洲AV成人直播| 人妻人久久精品中文字幕| 欧洲熟妇xxXx欧美老妇裸体| 成人怡红院| 白丝少妇一区二区| 入口操逼网站| 97在线看| 青娱乐手机日韩在线视频| 日韩精品中文字幕二区| 黄骗免费网站| 久久久久国产| A V少妇特黄三级| 熟女这里只有精品6| 国产夫妻性生活视频| 色哟哟国产精品免费网址| 天天色,天天干,天天干| 中文字幕一区二区三区人妻不卡| 中文一区二区婷婷视频| 熟女精品va中文字幕| 亚洲日韩精品一区二区| 亚洲激情天堂网| 久久久网站| 亚洲熟女精品| 日夜伊人网| 偷拍五区| 欧美日韩国产中文精品字幕自在自线, | 蜜臀久久一区二区| 欧美人妻久久精品二区三区| 试看60秒 爽| 蜜臀一二三区| 国产美女精品| 欧美夜夜狠| 手机在线人成免费视频| 日本成人免费一区二区三区| 性欧美第一页| 99色骚| 久久久亚洲精品电影免费看| 色牛牛AV| 国产精品嫩草久久久久| 人妻丝袜美腿中文字幕| 97在线观看免费| 91网站18在线| 婷婷国产精品九区| 五月天婷婷色色| 免费的黄片wwwwww| 国产AV色黄看到爽| 在线视频97| 91亚洲在线| 亚洲午夜精品久久久中文影院| 91久久堂| 黄总AV色图| 麻豆AV一区二区| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 国产最新小视频在线播放下载 | 久久人人爽人人爽人人片Ⅴ| 二男一女成人A片| 欧美黄色手机在线观看| 91视频在线观看18| 欧美丝袜中文字幕07在线| 人澡逼| 欧美在线综合| 视频在线中文字幕| 韩国嫰模上门援交视频| 青女在线| 性色av一区二区| 久久111| 亚洲大色堂| 欧美日本久久精品一区| 男人下部插入女人下部| 国产熟女少妇一区| 激情五月天综合网| 中文字幕在线观看丝袜| 超碰碰碰碰| 最新欧美色网| 炮色五月| 在线视频一区二区传媒| 久久超碰、| 97爱爱影院| laoshunv91| 中文字幕伊人| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照 | 神马久久久久久久久| 青青草导航在线视频| 午夜福利合集| 91精品导航| 97精品网| 天天躁日日躁成人字幕aⅴ| 樱花蜜乳av| www.91理论| 国产成人无码网站在线视频| 狠狠色综合网| 91欧美高清| 国产欧美日韩臀 | 啪啪资源网| 亚洲砖码砖专无区2023| 亚洲午夜av| 天美AV片| 色欲色香天天天综合网www-亚洲综合国| 久久999久| 日韩 女同 综合| 蜜臀久久99精品久久久久久成人小说| 亚洲国产精品无石码久久| 久久久性| 视频国产精品未满十八禁止在线观看| 久久99午夜精品一区人妻| 99日韩| 91视频观看网站| 蜜桃精品一区二区三区久在线| 久久精品操| 香蕉欧美| 一级久久性爱视频| 韩国一区二区精品亚洲| 青青草大香蕉在线视频| 国产丁香精品露脸视频| 日韩无码极品| 国产极品一区二区三区三州| 中文字幕二区日韩天堂| 天堂伊人久久| 男人的天堂1024| 人人操人人操人人人操| 深爱五月婷婷| 中文字幕综合人妻| 夜夜躁狠狠躁日日躁av| 国产精品久久久久亚洲av| 欧美九9 9 9| 超碰1997| 97色碰| 欧美日韩国产色图在线| 久久伊人网视频一区二区三区| 99re在线视频| 91P0RNY大屁股人妻| 久久九九综合| 日本新免费二区三区| 熟妇色99| 日韩精品亚洲专区在线影视| 欧美精品丝袜久久久中文字幕| 少妇蹲下买菜露大唇0| 操啊国产| 蜜桃臀av在线观看| 久久精品99| 亚洲精品乱码线路中文字幕| 五月天综合在线| 果冻传媒A片一二三区| 日韩欧洲操屄视频| 啊啊啊好爽快点啊啊啊嗯嗯| 亚洲熟女少妇免费视频| 中文字幕日韩精品久久| 3571色综合一区二区二区| 制服丝袜第二页| 7777奇米影视久久| 91精品电影18| 精品无码少妇| 国产97色在线| 欧美在线视频观看一二三四区高清| 综合网91| 91丨九色丨大屁股| 人妻丰满熟妇av无码区蜜桃| 2018天天干在线视频| 日韩久久超碰色| 日本操逼无码| 91蜜臀在线久久久久| 麻豆 美女 丝袜 人妻 中文| 亚洲操人| 国产日韩中文字幕欧美| 亚洲精品第一| 美女91av| 日本www操操操| 超碰97首页| 家庭乱伦性爱av| 欧美男人亚洲天堂| 国产精品盗摄 偷窥盗摄| 熟女在线视频| 欧美精品二区视频在线| 天堂日本亚洲欧美| 在线a亚洲视频播放在线| 大香蕉AV丝袜| 一级片视频啪啪| 吉田爱美AV在线| 蜜乳成人AV| 亚洲视频,小说| 天堂а√在线最新版在线| 青青操在线亚洲视频观看欧美在线 | 9超碰免费| 欧美性爱无码一区二区三区| 欧美猛交黑寡妇中文字幕| 久久久久久久久久久免费精品| 丝袜美腿校园春色| 约操熟妇| 亚洲玖玖爱| 亚洲中文字幕97久久精品少妇 | 蜜臀99999| 免费看国产曰批40分钟怎么下载| 青青草玖玖爱| 少妇滛荡视频| 色九久| 国产精品肉丝自拍| 久操com| 日本97久久| 91久操| 国产无码久久高清| 久操网在线| 另类一区| 男人天堂2017| 手机久操欧美综合色码| 96久久精品一二三区色欲| 欧美熟妇色| 亚洲丝袜天堂| 国产精品久久久久中文字幕| 高潮9999外国| 蜜桃在线观看一区二区三区| 人人看人人插| 99re在线视频国产| 狠狠色色| 亚洲国产91精品一区二区久久| 国产精品久久久久999| 狠狠综合网| 亚欧性爱无码| 久久香蕉国产线看观看亚洲女人 | 五月亭亭六月丁香| 亚欧美综合网。| 亚洲 欧美 天天| 久久黄色视频一区二区三区 | 久久亚洲AV无码专区国产精品| 欧美亚州综合网图片| 欧美美女在线高潮999| 久久精品亚洲成a人天堂| 国产精品熟女一区二区三区| 欧美乱妇狂野欧美在线视频| 激情五月综合网| 日本欧美一区二区三区视频麻豆| 伊人嫩草| 欲射影视| 玖玖视频在线资源一区二区三区| 亚洲欧洲综合av在线| 97av在线观看| 欧洲亚洲人人爽爽视频| 青娱乐亚洲热| 国产成人无码久久精品| 国产精品一区av在线| 欧美亚洲手机在线| 99re在线视频国产| 啊啊啊好湿久久| 丁香五月色情| 中文字幕精品日韩中文字幕| 人人操人人93| 国产白丝网站| 超碰97在线中文| 大香蕉色网| 麻豆天美久久91| 欧美中出1| 大香蕉久| 蜜臀AV秘一区翔田千里| 久久久久久九九九| 色与欲影视天天看综合网| 老熟妇综合| 麻豆国产av网| 加勒比无码一区二区三区| 色香色欲天天综合网天天来吧 | 99爱爱| 女生自91网站| 久久9久9久99久9久9| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 精品二区久久| 伊人网一本| 日韩 欧美 国产 麻豆| 18岁禁 茉莉成人久久| 日韩AV色图| 九九热精品免费视频| 可以免费观看的av| 天天日天天爽| 欧美色婷婷| 精品国产片亚洲一区| 精品人人插人人操| 国产精品无码论坛| 日韩视频啪啪| 日亚韩精品视频二区三| 爆操无码| 日韩去日本高清在| 色综合色欲色综合色综合色综合| 久久国内| 精品在线观看视频在线| 午夜福利视频在线一区| 国产亚州高清国产拍精| 在线无码操| 美女自卫慰黄网站免费| 精品人人插人人操| 日本人妻A片成人免费看片| 99综合免费视频| 99性爱视频| 天美传媒av 在线| 中文字幕在线观看网页| 欧美综合色站| 亚洲天堂人人妻| 欧亚揄拍偷拍精品视频| 极品一区二区三区免费| 超碰97久|