99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

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

Qt POST JSON 避坑指南:從QJsonObject到QNetworkReply完整封裝 簡(jiǎn)介面向Qt初學(xué)者與桌面應(yīng)用開(kāi)發(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)。工程配有簡(jiǎn)潔界面便于通過(guò)按鈕觸發(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等模塊依賴(lài)。整體壓縮包大小僅3KB結(jié)構(gòu)緊湊、無(wú)冗余資源可直接用Qt Creator打開(kāi)并編譯運(yùn)行適合作為輕量級(jí)參考工程。目前已有5380人學(xué)習(xí)。研讀源碼可掌握設(shè)置application/json請(qǐng)求頭、調(diào)用post()發(fā)送數(shù)據(jù)、通過(guò)信號(hào)槽接收服務(wù)端回包等關(guān)鍵寫(xiě)法也可作為向既有桌面程序集成網(wǎng)絡(luò)功能的起步模板。1. Qt 里 POST JSON 的坑十有八九不在網(wǎng)絡(luò)庫(kù)做 Qt 開(kāi)發(fā)用 Qthttp 發(fā) POST 請(qǐng)求、帶上 JSON body是再常見(jiàn)不過(guò)的需求登錄鑒權(quán)、狀態(tài)上報(bào)、調(diào)用開(kāi)放的接口服務(wù)幾乎每個(gè)項(xiàng)目都會(huì)碰到。很多朋友從網(wǎng)上找一段 postjson 的示例抄過(guò)來(lái)結(jié)果服務(wù)端要么收到空 body要么返回亂碼要么請(qǐng)求發(fā)出去之后石沉大海連回調(diào)都不觸發(fā)。這時(shí)候最容易懷疑 Qt 的 HTTP 模塊不靠譜但根據(jù)我拆過(guò)的一堆案例來(lái)看問(wèn)題大多出在三個(gè)地方請(qǐng)求頭 Content-Type 沒(méi)和服務(wù)端對(duì)齊、JSON 序列化格式選錯(cuò)、QNetworkReply 的生命周期沒(méi)管住。這篇文章從 QJsonObject 怎么組裝、QNetworkRequest 怎么配置一直講到 QNetworkReply 怎么安全收尾最后給出一套適合工程落地的封裝思路。適合正在用 C/Qt 對(duì)接服務(wù)端接口的開(kāi)發(fā)者也適合剛看懂示例但一改就翻車(chē)的新手。2. POST JSON 最小鏈路從 QJsonObject 到 QNetworkReply 的完整流程2.1 QNetworkAccessManager 的生命周期與選型在 Qt 里發(fā) HTTP 請(qǐng)求核心門(mén)面是 QNetworkAccessManager連接管理、請(qǐng)求調(diào)度、代理設(shè)置、SSL session 緩存都由它統(tǒng)一管理。我一般建議一個(gè)程序生命周期里只創(chuàng)建它一次長(zhǎng)期復(fù)用。原因很簡(jiǎn)單它內(nèi)部維護(hù)了 DNS 緩存、SSL session 緩存和底層的連接池如果你每次請(qǐng)求都 new 一個(gè)再 delete這些緩存全部作廢表現(xiàn)就是請(qǐng)求變慢、并發(fā)上來(lái)之后反復(fù)握手。這個(gè)差異在局域網(wǎng)接口上不明顯一旦連公網(wǎng)服務(wù)體感差距就很明顯。QNetworkAccessManager 的線(xiàn)程模型需要說(shuō)一下它是可重入的也就是說(shuō)不同實(shí)例可以分配在不同線(xiàn)程使用但同一個(gè)實(shí)例不建議跨線(xiàn)程調(diào)用。實(shí)際項(xiàng)目里最常見(jiàn)的做法是把 manager 放在主線(xiàn)程所有 post 都在主線(xiàn)程發(fā)起如果必須在工作線(xiàn)程用就讓那個(gè)線(xiàn)程自己創(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ì)。常見(jiàn)的做法是先對(duì)查詢(xún)參數(shù)做百分號(hào)編碼或者直接用 QUrlQuery 構(gòu)造查詢(xún)串后面 3.3 節(jié)會(huì)專(zhuān)門(mén)講。2.2 JSON 構(gòu)造與序列化別用手拼字符串很多人喜歡這樣拼 JSONQString({name:%1,age:%2}).arg(name).arg(age)。這種寫(xiě)法在小字段場(chǎng)景下能用但一旦字段值里出現(xiàn)引號(hào)、反斜杠、換行你就要自己處理轉(zhuǎn)義而服務(wù)端 JSON 解析器是零容忍的只要有一處引號(hào)不對(duì)稱(chēng)整個(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)適合打印日志和寫(xiě)配置文件。我見(jiàn)過(guò)有人把默認(rèn)的 Indented 格式直接發(fā)出去服務(wù)端也認(rèn)因?yàn)?JSON 規(guī)范本身允許空白字符但少數(shù)嚴(yán)格的服務(wù)端會(huì)拿 Content-Length 和實(shí)際接收體做一致性校驗(yàn)這種場(chǎng)景下 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 異步接收f(shuō)inished 信號(hào)與數(shù)據(jù)讀取post() 調(diào)用之后請(qǐng)求是異步的底層 socket 的讀寫(xiě)不阻塞調(diào)用線(xiàn)程響應(yīng)到了之后通過(guò)信號(hào)通知。標(biāo)準(zhǔn)寫(xiě)法是把回調(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)存惡劣場(chǎng)景下跑一天內(nèi)存占用漲幾百兆。connect 時(shí)把 this 作為上下文對(duì)象傳進(jìn)去是一個(gè)值得堅(jiān)持的習(xí)慣。這樣當(dāng) this 指向的對(duì)象先被銷(xiāo)毀時(shí)lambda 不會(huì)再被觸發(fā)避免在回調(diào)里訪(fǎng)問(wèn)懸垂對(duì)象導(dǎo)致崩潰。2.4 請(qǐng)求頭參數(shù)明細(xì)與常見(jiàn)誤設(shè)POST JSON 場(chǎng)景下請(qǐng)求頭直接影響服務(wù)端怎么解釋你的請(qǐng)求體這里集中列一張表Header 名推薦值說(shuō)明Content-Typeapplication/json服務(wù)端按這個(gè)決定走 JSON 解析分支部分框架要求寫(xiě)成 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è)字段繞來(lái)繞去容易產(chǎn)生兩個(gè)同名 header部分服務(wù)端看到重復(fù)頭直接報(bào)錯(cuò)。我在實(shí)際對(duì)接里就遇到過(guò)網(wǎng)關(guān)打印出兩個(gè) Content-Type 的情況排查半天發(fā)現(xiàn)是代碼里兩處都設(shè)了。3. JSON 組裝與解析嵌套結(jié)構(gòu)、數(shù)組與類(lèi)型陷阱3.1 嵌套構(gòu)造對(duì)象套數(shù)組數(shù)組套對(duì)象真實(shí)業(yè)務(wù)里的接口很少只有三五個(gè)平鋪?zhàn)侄?。登錄接口可能帶一個(gè) user 對(duì)象上報(bào)接口通常是一個(gè) events 數(shù)組數(shù)組里每個(gè)元素又是一個(gè)獨(dú)立對(duì)象。QJsonObject 和 QJsonArray 可以互相嵌套寫(xiě)法上先構(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[] 用于寫(xiě)入時(shí)如果 key 不存在會(huì)自動(dòng)創(chuàng)建這對(duì)構(gòu)造是方便的但如果你想先判斷 key 是否存在再?zèng)Q定是否寫(xiě)入要用 contains()。另外QJsonObject 內(nèi)部的組織順序在不同 Qt 版本之間并不一致官方也沒(méi)有承諾保持插入順序。如果你的業(yè)務(wù)依賴(lài) JSON 字段順序來(lái)生成簽名比如某些支付接口要求把所有字段按字典序排序再拼串那就不要依賴(lài) QJsonObject 的遍歷順序應(yīng)該拿到鍵名之后自己排序。3.2 防御性解析先判類(lèi)型再取值服務(wù)端返回的 JSON 往往比請(qǐng)求要復(fù)雜得多。有的接口成功時(shí)返回 object失敗時(shí)返回 {code: 400, message: ...}還有的接口干脆返回?cái)?shù)組。解析端我強(qiáng)烈建議養(yǎng)成“類(lèi)型先判斷、取值有兜底”的寫(xiě)法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(); } }這樣寫(xiě)的好處是字段缺失和類(lèi)型不符合都會(huì)被擋在門(mén)外不會(huì)因?yàn)橐粋€(gè)字段解析失敗導(dǎo)致整個(gè)響應(yīng)白拿。有一個(gè)容易誤判的地方value(code).toInt(-1) 這種寫(xiě)法缺 key 時(shí)返回 -1但 key 存在且類(lèi)型是 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 查詢(xún)參數(shù)編碼。很多接口要求在 URL 里帶簽名和時(shí)間戳如果簽名值里出現(xiàn) 、、 這類(lèi)字符直接拼進(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ù)來(lái)傳避免兩個(gè)端對(duì)不上賬。4. 同步等待與超時(shí)控制既要結(jié)果同步也要死等可控4.1 QEventLoop 把異步請(qǐng)求改成本地等待Qt 的 HTTP 請(qǐng)求本質(zhì)是異步的但很多業(yè)務(wù)邏輯是線(xiàn)性的先登錄拿 token再帶 token 請(qǐng)求數(shù)據(jù)。拆成信號(hào)槽一層層回調(diào)也能寫(xiě)但回調(diào)嵌套多了以后可讀性和排錯(cuò)成本都會(huì)上升。一個(gè)常見(jiàn)的做法是借用 QEventLoop 把“異步請(qǐng)求 等待完成”包裝成同步函數(shù)。這個(gè)寫(xiě)法適合命令行工具、后臺(tái)任務(wù)線(xiàn)程這類(lèi)場(chǎng)景。注意如果跑在 UI 線(xiàn)程進(jìn)入事件循環(huán)會(huì)阻塞界面刷新用戶(hù)看到的就是界面卡死所以 GUI 程序里不要在主線(xiàn)程做這種同步等待。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ā)出來(lái)把 loop 的 quit 兜住不會(huì)出現(xiàn)死等。如果只等 finished 而不管超時(shí)遇到服務(wù)端遲遲不響應(yīng)線(xiàn)程就真的掛死了。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)求生效。需要注意它的語(yǔ)義它是指“無(wú)數(shù)據(jù)活動(dòng)超時(shí)”不是“整個(gè)請(qǐng)求的總時(shí)限”。也就是說(shuō)一個(gè)請(qǐng)求持續(xù)在傳數(shù)據(jù)哪怕已經(jīng)跑了 30 秒它也不會(huì)被掐斷。這和很多服務(wù)端框架里的“總超時(shí)”概念不完全一樣對(duì)接時(shí)要心里有數(shù)。Qt 5.15 之前的版本沒(méi)有這個(gè)接口更早版本的兼容做法就是第 4.1 節(jié)里那樣用單次 QTimer 配合 reply-abort()。有一個(gè)常見(jiàn)的誤用在 QTimer 的槽里直接調(diào) loop.quit()而不是先 abort。表面上循環(huán)退出了但請(qǐng)求還在后臺(tái)繼續(xù)跑后續(xù) finished 信號(hào)仍然會(huì)觸發(fā)線(xiàn)程退出時(shí)可能帶出一堆“connection closed”之類(lèi)的噪音。還有一個(gè)值得避免的寫(xiě)法不要在一個(gè) QEventLoop 里再嵌套另一個(gè) QEventLoop 去等新的 HTTP 請(qǐng)求。我見(jiàn)過(guò)有人在 finished 回調(diào)里又起一個(gè)新的 loop 去等下一個(gè)管理器的請(qǐng)求理論上能跑但其中一個(gè)超時(shí)沒(méi)兜住整個(gè)線(xiàn)程就僵住不動(dòng)。連續(xù)多段請(qǐng)求的正確做法是把它們串成隊(duì)列或者像第 2 章那樣用異步回調(diào)鏈。5. 避坑與排查POST JSON 最常翻車(chē)的五個(gè)現(xiàn)場(chǎng)5.1 服務(wù)端收到空 bodyContent-Type 與序列化格式?jīng)]對(duì)上現(xiàn)象接口返回 HTTP 200但服務(wù)端業(yè)務(wù)日志顯示收到的 body 是空的或者字段全是 null。原因最常見(jiàn)的有三種。第一post() 時(shí)直接傳了 QJsonObject沒(méi)有先 toJsonQt 按表單編碼處理服務(wù)端走 JSON 解析自然拿不到。第二Content-Type 沒(méi)設(shè)或者設(shè)成了 text/plain服務(wù)端沒(méi)走 JSON 解析分支。第三URL 拼錯(cuò)導(dǎo)致請(qǐng)求打到了另一個(gè)接口上這個(gè)在 5.5 節(jié)單獨(dú)說(shuō)。解決把 payload 先用 qDebug() 打印出來(lái)確認(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)里的中文變成“錕斤拷”之類(lèi)的亂碼或者所有中文都變成 \uXXXX 轉(zhuǎn)義串。原因HTTP 響應(yīng)頭沒(méi)有聲明 charset 時(shí)Qt 默認(rèn)按 UTF-8 讀取如果服務(wù)端返回的是 GBK讀出來(lái)就是亂碼。\uXXXX 其實(shí)是 JSON 規(guī)范里的標(biāo)準(zhǔn)轉(zhuǎn)義不代表數(shù)據(jù)錯(cuò)誤只是還沒(méi)解碼顯示。解決先看原始字節(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 證書(shū)驗(yàn)證失敗本地調(diào)試與正式環(huán)境要分開(kāi)對(duì)待現(xiàn)象請(qǐng)求本地開(kāi)發(fā)環(huán)境的 HTTPS 接口時(shí)報(bào) SSL handshake failed 或者 certificate signed by unknown authority。原因本地聯(lián)調(diào)的 HTTPS 服務(wù)大多使用自簽證書(shū)Qt 默認(rèn)的證書(shū)鏈校驗(yàn)不認(rèn)這個(gè)證書(shū)。解決開(kāi)發(fā)環(huán)境可以臨時(shí)放行。比較穩(wěn)妥的做法是連接 reply 的 sslErrors 信號(hào)在回調(diào)里打印出錯(cuò)信息然后調(diào)用帶參數(shù)版本的 ignoreSslErrors只放行當(dāng)前這幾條錯(cuò)誤不要無(wú)腦調(diào)用無(wú)參版本把未來(lái)所有證書(shū)錯(cuò)誤全部忽略。這個(gè)妥協(xié)手段只適合本地調(diào)試測(cè)試和正式環(huán)境必須走正規(guī)證書(shū)鏈否則中間人改數(shù)據(jù)沒(méi)有任何提醒安全邊界形同虛設(shè)。5.4 reply 泄漏與隨機(jī)崩潰生命周期沒(méi)理順現(xiàn)象程序運(yùn)行一段時(shí)間后隨機(jī)崩潰崩潰棧指向 QNetworkReply 相關(guān)或者內(nèi)存占用持續(xù)上漲。原因reply 沒(méi)有按規(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 指針一定要在連接銷(xiāo)毀前保持有效。connect 時(shí)帶上上下文對(duì)象比如 connect(reply, QNetworkReply::finished, this, lambda)一旦 this 對(duì)象先銷(xiāo)毀回調(diào)自動(dòng)斷開(kāi)能規(guī)避一大批懸垂崩潰。5.5 請(qǐng)求沒(méi)有響應(yīng)先查 URL 編碼和 JSON 合法性再查事件循環(huán)現(xiàn)象POST 發(fā)出去之后什么回調(diào)都不觸發(fā)程序不報(bào)錯(cuò)也不崩潰就像請(qǐng)求被黑洞吞了。原因常見(jiàn)兩種。一是 URL 帶了未編碼的中文或特殊字符QNetworkAccessManager 對(duì)非法 URL 的處理很安靜沒(méi)有顯式錯(cuò)誤信號(hào)表現(xiàn)就是沒(méi)任何回調(diào)二是代碼跑在一個(gè)沒(méi)有事件循環(huán)的線(xiàn)程里QNetworkAccessManager 的信號(hào)派發(fā)依賴(lài)事件循環(huán)循環(huán)不跑finished 永遠(yuǎn)不會(huì)觸發(fā)。解決第一步把 URL 打印出來(lái)確認(rèn) setUrl 前已經(jīng)做了百分號(hào)編碼第二步檢查當(dāng)前線(xiàn)程有沒(méi)有事件循環(huán)沒(méi)有就換到有循環(huán)的線(xiàn)程或者用第 4 章的同步等待方式第三步給請(qǐng)求加兜底超時(shí)確保任何情況下都不會(huì)無(wú)限等下去。6. 收尾建議把 POST JSON 封裝成公共調(diào)用工具6.1 封裝一個(gè)帶回調(diào)的 postJson最后一個(gè)建議把項(xiàng)目里所有 POST JSON 的調(diào)用收斂到一個(gè)公共位置不要散落在各個(gè)界面類(lèi)里。通常我會(huì)封裝一個(gè) HttpManager 類(lèi)內(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)類(lèi)里。6.2 日志、狀態(tài)碼與簡(jiǎn)單重試在封裝基礎(chǔ)上我會(huì)再加兩條習(xí)慣。第一請(qǐng)求發(fā)出時(shí)打一行“方法 URL payload”日志響應(yīng)收到后打一行“狀態(tài)碼 錯(cuò)誤串 耗時(shí)”排查問(wèn)題不再需要臨時(shí)加調(diào)試語(yǔ)句。第二加一個(gè)簡(jiǎn)單重試失敗且狀態(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ú)開(kāi)定時(shí)器省心GUI 程序優(yōu)先走異步回調(diào)腳本和后臺(tái)線(xiàn)程再考慮 QEventLoop 同步等待。我從做第一個(gè) Qt 網(wǎng)絡(luò)模塊的模擬項(xiàng)目開(kāi)始每次接口對(duì)接都強(qiáng)制走一遍自檢鏈先打印請(qǐng)求報(bào)文再核對(duì) Content-Type然后確認(rèn) reply 生命周期最后看響應(yīng)原始字節(jié)。這套流程讓我少踩了無(wú)數(shù)坑現(xiàn)在新項(xiàng)目第一天就把 HttpClient 封裝好后面每個(gè)接口只改 JSON 結(jié)構(gòu)和回調(diào)邏輯翻車(chē)率低了很多。希望幫你把 POST JSON 這條路走順。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九九中文字幕九| 亚洲色五月天在线| 久久无意婷婷| 色婷婷基地 | 五月激情婷婷六月| 伊人婷婷色激情丁香| 9久久久| 九九AV| www.狠狠干com| 中文字幕九九九九| 99热日| 精品国产乱码久久久久夜深人妻| 五月婷在线| 99热这里只有精品4| 五月天色狠狠| 日日爱678| 婷婷激情啪啪| 91视频久久久| 激情文学 综合 九月| 女人天堂AV| 99视频在线| 五月天另类综合网| 五月婷婷新网站| 嫩草视频观看| 第四色五月婷婷| 欧美婷婷色| 激情丁香五月| 欧美日韩99| 先锋资源91| 人妻久久久久久久久久久| 九九人妻福利| 久久99热这里只有精品23| 五月婷婷狠狠干| 久久天堂女人| Www.狠狠| 91碰超| 欧美日本99| 中文字幕日本最新乱码视频| 操人妻AV| 婷婷福利影院| 第1影院之五月婷婷| 国产精女同一区二区三区久| 亚洲天堂碰碰婷婷| 日本丁香久在线| 99啪啪骑| 色综合中文色综合网| 九月丁香欧美综合| 丁香婷婷九月| 新99色色色色色色| 亚洲婷婷成人五月天| 婷婷丁香亚洲五月天| 婷婷丁香六月影视| dingxiangtingtingliuyue| 99精品视频在线| 翔田千里aV中文字幕| 噜一噜免费视频| 五月天婷婷色| 日日干夜夜撸夜夜骑| 国产精品噜噜在线视频| 色婷婷五月天综合网| 六月天六月婷| 五月婷婷在线免费观看| 中文字幕av在线| 亚洲av网站| 五月香婷婷| 开心激情婷婷| 激情综合五月丁香六月婷婷| 日韩黄色网络| 九九视频这里是精品五月| 99亚洲综合| 婷婷五月天.com| 亚洲无码成人性爰网| 性爱电影科技贸易有限公司| 日本狠狠网| 天天操夜夜操| 亚洲精品又粗又大又爽A片| A片试看50分钟做受视频| 蜜桃人妻无码AV天堂三区| 熟女色色一区二区| 91日日日| www.日日日.com| 久99久热只有精品国产99| 五月丁香婷庭在线| 成片免费播放| 婷婷五月丁香激情| 99在线播放视频| 欧美日韓成人亚洲精品另类| 美女丁香五婷婷| 色综合丁香婷婷| 丁香激情五月天| 婷婷的五月天另类视频| 久久婷婷综合基地| 思思热久久爱| 色五月人妻| 国产毛片精品一区二区色欲黄A片| 伊人高清无码| 大香蕉啪啪啪| 五月天激情综合网| 91无码一区人妻A片蜜| 婷婷激情五月天激情小说| 欧美啪啪9| 五月噜噜噜色综合| 天天爽天天操| 九色亚洲| 丁香婷婷久久| 91啪啪网| 久久38视频| 五月婷婷色色| 96丁香六月婷婷蜜桃综合久久| 激情九月综合| 婷婷五月激情视频网| 大香蕉九九| 少妇人妻凹凸视频| 91五月天| 亚洲综合1024| 天天激情欧美美女| 五月天大香焦| 日日噜噜久久婷婷五月天| www激情| 九九色逼| 爱操人妻| 天堂久久婷婷| 亚洲AV永久无码影院黑人 | 91操人视频| 日本97在线看片| 天天曰夜夜爽| 一本久道综合色婷婷五月| 搡BBBB搡BBB搡18 | www.主妇. com| 婷婷五月花丁香| 婷婷五月综合在线| 久久综合丁香五月| 色婷久久| 97婷婷丁香| 思思久久青草热| 久久婷婷视频| 色婷婷99| 久久久噜噜噜久久人妻| 日本69日人视频| 久久思思精品| 极品五月天| www.夜夜夜| 久9视频| 夫妻超碰在线| 色五月人妻| 大战熟女丰满人妻AV| 久99在线视频| 亚洲六月色婷婷| 狠狠爱婷婷五月天| 丁香五月天的网址。| 综合婷婷| 日本无va视频| 免费观看全黄做爰的视频| 伊人久久大香网| 婷婷社区五月天| 综合久久激情久久| 婷婷综合激情五月综合| 性色做爰片在线观看WW| 婷婷深爱五月亚洲综合| 极品人妻VIDEOSSS人妻| 婷婷天天综合| 激情综合网激情五月婷婷| 丁香五月成人论坛| 亚洲春色奇米影视| 丁香五月婷婷综合网| 亚洲日韩乱码一区二区三区四区 | 99碰碰| 玖玖婷婷综合| 一级片sese片.COM| 97色碰| 激情啪啪五月天| 婷婷色五月丁香六月欧美啪| 天天操夜夜夜夜爽| 韩国中文字幕91| 第六色在线| 97人人草| 色五月视频,小说| 婷婷亚洲在线| 人妻少妇色综合| 97碰成超视频免费视频| 国产 码在线成人网站| 丁香色六月婷婷| 99ri精品视频在线观看| 色五月成人婷婷| 色色色综合网| 99在线看片| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 久久综合站| 五月天久久综合婷婷丁香| 综合久久五| 色五月综合激情| 欧美激情-区二区三区| 九九热在线观看视频| www.9797国产| 五月天六月色| 五月天六月婷婷电影| 日韩久久日| 99精品视频免费观看| 99亚洲精美视频在线观看| 日本美女上人| 亭亭色天香| 婷婷94s| 久久免费精彩视频| 欧美99热| 日韩黄色AV无码| 久久天堂精品| 日本九九九九| 久久久这里有精品| 这里只有精彩小视频视频网站| 日本色婷婷| 天天综合永久| a在线观看| 五月丁香激情综合网| 丁香五月天欧美| 婷婷五月激情综合网| 五月丁香综合影院| 99这里只有精品国产| 综合久久婷婷99| 夜夜撸夜夜骑| 午夜九九电影| 91久久精品无码一区二区三区| 99热这里是精品| 人妻精品久久久久久久| 99久久精彩视频。| 六月激情网| 婷婷色导航| 婷婷亚洲在线| 婷婷激情小说网| 九九九激情网| 久久亚洲婷婷| 丁香五月影院| 五月婷婷开心六月激情小说| 碰碰91| 天天视频亚洲| 激情综合播播| 色99热| 乱精品一区字幕二区| 精品丁香五月天在线播放| 青青操avbb| 色婷婷色| 99婷婷综合| 丁香午夜天| 五月天狠狠草| 高清无码一区二区三区四区| 综合婷婷| 9精品视频在线| 国产69久久久欧美黑人A片| 激情网婷婷五月天| 激情网婷婷婷| 婷婷色五月色妇| 欧美色色色色色色色色色色| 狠狠ri| 99ri在线视频| 九九九九国产| 九九热在线观看6| 色狠狠婷婷| 九九久久99精品免费观看www| 五月婷在线观看| 另类图片五月天激情| 丁香六月天之亚州热女 | 色9999日韩国产| 婷婷久久综| 99这里有精品视频| av九九| 激情五月天婷婷激情| 婷婷五月综合激情| 色爱99| 亚洲亚洲人成综合网络| 这里只有精品视频在线看| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 91seav| 色婷婷88| 玖玖热视频| 婷婷五月天综合激情| 26uuu成人网| 天天搞夜夜爽夜夜爽| 日韩色色视频| 天天成人综合视频| 9 1大香蕉| 久久久这里有精品| 丁香六月色婷婷| 伊人久久婷婷| 激情五月婷婷在线区| 天天干人人奸97| 婷婷色五月色| 97碰在线视频| 大香蕉220| 婷婷五月天a| 天天肏天天肏| 97综合在线| 就爱操www com| 99精品久久久久久| 五月天伊人综合| 一级黄色影片| 国产精品成av人在线视午夜片| 六月丁香久久| 婷婷五月天成人网| 婷婷五月天99综合网站| 成人免费在线电影| 天天成人综合| 综合激情sV| 97人人操人人| 亚洲射激情| 国产女生爱爱AA| 丁香婷婷色情| 99热综合在线观看| 91色逼| 婷婷综合激情| 色五月天成人| 欧美噜噜免费观看| 九九偷拍网| 五月丁香香蕉| 米奇影视五月天| WWW免费视频碰碰碰碰| 天天色视频| 丁香激激情网| 草综合网| 色婷婷亚洲综合av| 激情六月天| 久久人妻高清中文| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 国精产品一区一区三区免费视频| 激情丁香五月天| 六月丁香深深爱综合网| a片在线免费观看一区| 九九综合色| 丁香五月婷婷激情123| 七七色色综合| 婷婷综合中文字幕| 99久久6| 狠色狠色综合久久| 二人电影免费版在线观看| 野外99热| 亚洲妇女熟BBW| 五月丁香在线| 人妻精品久久久久久久| 五月激情婷婷图片基地| 色www.con| 中文中文在线| 色五月婷婷在线| 青草青青草| 六月五月丁香五月欧美| 色九亚洲| 精品导航在线x不卡| 99热精品在线观看| 亚洲中文av| 性天天中文网| 色婷婷色久综| 5月激情天| 五月花激情网| 久久九九99视频| 婷婷五月天综合在线| 啪啪小说五月天| 在线,国产,色,热视频| 久久精品夜色噜噜亚洲a∨| 蜜桃婷婷丁香综合久久开心亚洲| 激情丁香五月| 激情久久久| 日本婷婷| 久久综合丁香激情五月| 毛片新网地| 在线观看五月婷婷网| 99精品高潮| a免费在线| 免费黄色视频网址| 丁香成人五月天| 婷婷五月天综合AV| 99在线免费观看| 亚洲 五月 婷婷 成人| 99久久这里只有精品免费官网| 色99色| 超碰A V在线| 色狠狠色综合久久久绯色aⅴ影视| 成年人丁香五月| 丁香九九九九| 久久丁香五月| www.91九色| 六月激情网| 热热久久99| 天天干天天 亚洲| 另类色网| 免费的日逼视频| 五月婷视频久久| 色碰碰视频| 色五月婷婷自拍| 国产精品视频网| 黄色高清无码| 六月婷在线| 99热免费18| 六月丁香婷婷爱| WwW色婷婷| 99久久99综合| 九色综合网| 天海翼中文字幕高| 91干网站| 久久久久久久五月| 91视频五月丁香| 婷婷色色欧美| 色噜噜夜夜夜综合网| 9久久久| 99免费偷拍视频| 久久久A级视频| 九伊人网| 91精品无码| 日本啪啪天堂| 欧美成人Va| 99热免费网站| 五月色丁香婷婷中文字幕| 天天天天天操| 日本va欧美va欧美va| 色色cOm| 精品国产va久久久| 久久婷婷亚洲| 人妻无码精品一区| 狠狠综合网| 伊人高清无码| 亚洲AV无码成人精品电影| 色综合色婷色基地| 丁香花色色网| 五月婷婷就去色| 丁香开心深爱| 深夜激情网| 久久久无码精品成人A片小说| 色情五月天丁香社区| 伊人碰碰碰| 五月天色丁香| 9色婷婷| 一区二区三区四区牛| 丁香六月激情综合网| 亚洲成人高清在线| 九九热这里有精品23| 五月天激情AAAA| 激情综合色婷婷六月天| 久9视频| 丁香婷婷色五月| 超碰婷婷色| 99伊人婷婷在线| 丁香五月综合婷婷| 艾小青av| 99热精品99| 色色aⅤ網| 丁香五月五月婷婷五月天激情四射| 夜夜爱网站| 婷婷黄色| 日日噜噜夜夜狠狠久久丁香五月| 91精产一区三区免费观看| 五月天综合在线| 丁香伊人综合| 大香蕉欧美在线| 久青草影院| a性生活久久无| 久久精品天| 婷婷综合| 色五月女| 五月婷婷丁香| 五月天伊人久久| 五月色婷| 激情婷婷色五月| 丁香五月婷婷啪啪啪| 无遮挡国产高潮视频免费观看| 婷婷激情五月天激情小说| 国产9色在线/日韩| 五月天久久丁香| 狠狠操狠狠爱| 香蕉五月婷婷| 翔田千里aV中文字幕| 天天狠狠六月婷丁香影院| 亚洲精品成人| 天天se在线视频| 色婷婷五月天激情在线播放| 美欧日韩国产成人在战| 嫩草免费视频| 色婷婷成人丁香| 开心激情网五月天| 欧美大片| 99啪啪视频| 女人天堂 AV| 天天精品视频免费观看| 久久91久久91色欲精品| 婷婷五月天日日日干干干| 久青操| 综合 激情 婷婷| 91九色在线| 国产精品香蕉| 五月网站| 久热只有这里有精品| 天天插天天日| 婷婷九月丁香中文| 无码激情精品色婷婷久久久久| 丁香六月狠狠干| 亚洲传媒在线观看| 色五月av伊人| 青青草五月天| 久久草中文日韩欧美| 狠狠色丁香久久婷婷综合五月| 亚洲热热视频| 日本一道久久| 玖玖婷婷色五月| 欧美97超碰| 婷婷色五月激情| 色欲影香| 中日韩狠狠色| 777色色色| 久久艹 五月天| eeuss人妻| 99激情| 97成人视频| 欧美视频在线观看噜噜| 欧美黑人巨大性生话| 9色视频在线| 国产成人亚洲综合A∨婷婷| 丰满少妇乱A片无码| 色之综合网| 色五月婷婷av| 手机在线日韩视频中文字幕| 欧美五月婷婷| 亚洲色五月婷婷| 色婷婷色人人射| 人妻丰满精品一区二区A片| 91五月天| 99精品在这里| 久久综合99| 欧美丁香五月97色| 五月婷婷色影院| 欧美 日韩 成人| 一婬一伦一区二区三区| 天天摸天天透天天舔| 五月丁香A片| 六月丁香好婷婷| 亚洲乱码日产精品BD| 性婷婷| 九九热精品| 99re熱| 丁香六月天| 婷婷五月天在线看| 五月开心网| 丁香五月性| 五月婷婷色| 久久婷婷亚洲| 4399成人黄A片| 婷婷欧美偷拍综合| 成人做爰A片免费看视频| 有码人妻久久| 97在线观视频免费观看| 色五月婷婷天天操夜夜操| 婷婷五月天天| 五月天狠狠网| www.maotanji.com| 99这里都是精品6| 色综合色婷婷色伊人| 亚洲天堂热| 99 这里只有精品| 四季8848精品成人免费网站| 99免费视频在线观看爱| 91天堂网综合| 色色色五月婷婷| 亚洲小视频免费观看| 激情五月天视频| 97色色色视屏| 婷婷五月天综合亚洲| 婷婷五月天在线观看免费 | 久热免费视频| 亚洲色色色色色色色色色| 免费亚洲婷婷| 婷婷五月色网| 天堂网啪啪| 色五月91| 婷婷舔| 丁香操逼| 91婷婷在线| 99热久只有| 色婷婷很很丝袜| 色香欲综合| 五月婷婷色情| 日本视频久久| 五月婷婷视频| 丁香激惜男女| 9久热在线精品| 欧美天堂久久| 伊人日日干| 欧美69色| 99热都是精品| 播五月丁香六月| 九九综合色综合| 五月丁香激情啪啪| 亚艹艹| 九月丁香婷婷综合| av免费在线看不卡无毒| 色婷婷日本| 六月色日韩| 99久久97| 天天狠狠夜夜狠狠2023| 日日夜夜天天爽| 91丨九色丨白浆| 天天干一干| 婷香五月激情视频| 五月六月丁香婷婷在线观看| 午夜福利8055| 激情小说五月天| 天天做好综合色| 热99国产精品| 天综合日日夜综合7799| 婷婷丁香五月综合| 五月天综合久久| 色欲婷婷夜夜| 狠狠综合色网| 亚洲视频在线观看| 色婷婷97| 五月深爱激情网| 久久婷婷五月天| 九九99视频精品| 五月丁香六月激情欧美综合| 特级西西4444www无码| 精品色情一区二区三区四区| 丁香视频| 99色热综合| 综合久久99| 狠狠干在线| 精品国产va久久久久久久| 国产亚洲99久久| 午夜精品久久久久久久爽| 超碰人人操在线| 99视频热| 国产欧美婷婷五月| 日韩亚洲视频| 91色干| 婷婷D区| 久久五月天综合| A久久| 天天干肏夜夜| 丁香五月婷婷综合视频| 久久婷.com| www亚洲无码| 河北真实伦对白精彩脏话| 婷色五月| 激情六月天婷婷| 99这里有精品视频视频| 久久这里只有精品无码| 综合五月草| 久久精品9| 久久久久五月丁香| 五月婷婷久久大片| 极品人妻VIDEOSSS人妻| 色色色色网| 97人人看| 五月激情天| 丁香六月婷婷综合啪啪| 色婷婷亚洲在线| 激情婷婷人妻| 五月丁香成人日| 丁香5月激情网| 婷婷97碰碰| 色婷婷瘦婷婷日韩| 中文字幕+中文在线| 久久久精品免费啪啪国| 婷婷五月在线影院| 最近中文字幕2019视频1| 色5月婷婷| 五月色影院| 久久久99久久| 五月丁香久久综合| 久热综合| 婷婷在线精品| 亚洲色婷婷| 丁香五月婷婷色| 91超碰人人操| 五月天综合网| 九九色色| 综合网五月| 婷婷伊人五月天| 色狠狠色| 九九热在线精品| 激情小说婷婷| 日本天天色| 国产看真人毛片爱做A片 | 专区无日本视频高清8| 天天日天天色| 成人无码精品1区2区3区免费看 | 九九九激情网| 婷婷五月天最新网址| 九九色婷| 991自拍视频| 9 大屁股在线视频精品| 97久操视频| 五月停停色| 色噜噜夜夜夜综合网| 天天噜日日噜综合无码| 欧美天天爽| ,99视频久久| 狠狠五月丁香色婷| wwwC0maV五月花| 少妇人妻综合色6699| 丁香五月婷中字幕| 五月丁香激| 99久在线精品99re8| 79精品视频在线观看,| 亚洲无码99| 丁香五月激情久久麻豆| 日本久久极品| 久久婷婷成人| 五月丁了香蕉综合| 五月亭亭综合五码| 婷婷色综合av| 狠狠操狠狠操AV| 日本人妻伦在线中文字幕| 婷婷丁香五月天激情四射| 欧美狠狠色| 日本三级中国三级99人妇网站| 久久精品99| 大香蕉色婷婷伊人在线| www.99热这里精品| 色五月天影视| 99色一| 婷婷五月情| 丁香五月天啪啪| 少妇水多A片太爽了| 69人人操人人爽| XX久久| 久久aaa| 婷婷欧美激情| 亚洲五月婷婷| 性爱网五月婷婷| 五月丁香少妇| 婷婷五月天在线综合导航| 亚洲激情97五月天| 99黄色性生活| 99欧美热| 久99久在线| 夜夜夜叫天天天做| 超碰高清在线| 五月丁香网站| 成人一区在线观看| 激情婷婷五月女| 男人的天堂五月丁香| 99自拍视频网站| 久久精品国产一区二区三区四区| 综合超碰熟| 九九热这里有精品视频| 久久99性爱| 99热这里只有精品4| 婷婷五月丁香国产| 久久精彩免费视频精彩免费视频| 色五月视频无码播放| 免费黄色AV| 成人免费黄色短视频| www99久久| 午夜婷婷五月天在线| 国产91视频| 超碰2021| 久久久久久天天日天天爱| 五月天婷婷在线播放| 丁香六月综合激情| 激情中文在线| 精品一区二区三区木瓜| 色99视频| 丁香六月婷婷色XXXXX| 日韩人妻无码一区二区| 婷婷色婷婷| 丁香五月婷婷欧美性爱| 热99国产精品| 欧美色五月| 久久人妻超碰一区| 久久只有这里精品免费| 亚洲综合色网| 校园春色亚洲色| 亭亭丁香久久五月| 99色中文| 色婷婷aV四虎| 色青青视频| 色五月婷婷综合| 久热丁香| 99小视频网站| 免费做A爰片77777| 色噜噜狠狠色综合无码久久欧美| 色播五月天激情| 人人肏逼视频在线一区二区| 这里只有精品日韩精品| 综合色播| 丁香五月色五月| 在线可以看的av网址| 国产99热| 婷婷五月天色| 色播婷婷大香蕉| 97香蕉人人在线观看| 五月丁香色婷婷熟女| 九九av| 99热在线观看免费中文| 精品成人在线观看| 六月婷婷网| 五月丁香在线综合| 91午夜婷婷狠狠久久综合9色| 亚洲无码成人网| 91人妻人人做人碰人人爽九色| 777久久久| 日日日日操| 大香蕉在九| 丁香婷婷人妻综合网| 亚洲综合激情五月久久| 91久久久久久久| 99福利导航| 五月婷婷|欧美| 日本熟女二区| 91久久人人操| 79色色色色| 久久九九Com| 国产黄色大片| 激情五月婷在线精品| 在线看的免费网站| 日本狠狠爽| 99色色网| 色情丁香五月天| 天天爽天天干| 婷婷五月深深的爱| 噼里啪啦在线观看免费完整版视频| 九九热色视频| 五月天综合网| 激情99。| 成人无码精品1区2区3区免费看| 六月丁香射婷婷欧美色图片| 四LLL少妇BBBB槡BBBB| 激情伍月 欧美| 嫩草AV久久伊人妇女超级A | 五月婷在线视频免费播放| 久久婷婷七月丁香| 成人精品99| 墨西哥毛片内射精| 开心激情五月天网| 婷婷成人AV| 婷婷五月综激情| 99热国产精品| 99成人| 激情图片婷婷| 久久五月婷天天干| 色色网站免费| 中文字幕欧美久久| 91色婷婷综合久久中文字幕二区| 色色色激情| 国产精品大香蕉| 5月丁香综合网| 色五月综合激情网| 色偷偷色婷婷| 久久3p| 日日杆天天| 婷婷丁香六月激情综合| 99热草草| 婷婷 丁香 精品| 久久精典| 五月综合久久| 婷婷色成人| 人人插9| 国产激情视频在线观看| 五月天色播网| 琪琪色网在线| 欧美激情综合色综合啪啪五月| 啪啪激情网| 色婷婷丁香五月天| 五月色精品| av第一二区| 九热视频| 天天 青草 丝袜制服 在线| 天天视频精品9| 99色网站| 国产欧美日韩一区二区三区| 六月婷婷日| 99色综合网| 色情五月天se| 国产在线视频1234| VA色婷婷| 婷婷四色五月| 六月婷婷九月丁香| 大香蕉九九| 亚洲欧州色情在线观看| 日韩在线视频网站| 免费视频WWW在线观看网站| 丁香五月亚洲| 久久草大香蕉| 九色在线五月婷婷网址| 五月天伊人久久久久| 熟女乱论网| 丁香五月WWW| 狠狠色狠狠操| www,26uuu,c0m,色情| 91精品久久久久久77777| 亚洲熟妇AV乱码在线观看| 无码区婷婷五月花开| 伊人大香五月天| 九一九九黄色| 久久精品人妻| 狠狠xx| www。五月天激情| 欲色人妻| 深爱激情五月天| 色婷婷婷婷| 同性gv国产精品一区二区| 综合久久久婷| 中字幕视频在线永久在线观看免费| 婷婷天天婷婷天天澡| 色五月丁香总合网| 伊人色五月| 国产69久久久欧美黑人A片| 综合99视频| 五月婷婷综合色拍| 99热这里只有精品1025| 黄色网址五月婷婷| 久久婷婷五月天| 天天爽,夜夜爽| 久久成人性爱| 91色综合网| 色五月色开心开心五月| 成人在线视频网| 日本爆乳片手机在线播放| 96性爱视频| 99操碰| 99玖玖精品| 久久激丁香| 热99热9| 婷婷激情五月综合| 婷婷五月激情综合啪啪| 国外亚洲成AV人片在线观看| 九九AV在线| 丰满熟女人妻一区二区三| 另类图片激情五月天| 色色爽爽天天| 97香蕉人人在线观看| 91色呦哟| 色婷五月| 超碰在线观看99| 五月丁香婷婷综合网| 午夜婷婷五月天在线| 国产精品久久99| 色噜噜狠狠色综合网| 婷婷五月丁香激情图片 | 五月丁香色停停啪啪啪| 色婷婷亚洲婷婷| 久9久9久9久9久9久9| 婷婷天天日婷婷| 婷婷五月天日日日干干干| 天天色综和网| 草一草avb| 九九综合网色全集 | 天天日夜夜曹| 天天精品视频在线观看视频| 日本va欧美va精品发布视频| AV九九| 亚洲 视频 导航 一区| 成人片在线免费看| 91操女| 五月桃花网综合| 天堂无码人妻精品AV一区| 日韩中文欧美| 亚州色婷婷| 亚洲情色一区| 狠狠干综合网| 久久亚洲无码| 99激情| 99热8| 色五月婷婷影院| 久久欧洲综合网| 九九热视频免费观看| 五月天激情在线视频| 九九视频免费| 激情综合5| 亚洲综合字幕色色| 九九久久精品| 久久久久妻| 伊人91| 婷婷五月丁香综合亚洲| 国产一级片| 亚洲色情久久| 丁香丁婷五月激情| 99免费成人网| 美女va| A一级操| 深爱激情四射| 婷婷玉月丁香五月在线视频| 五月天中文字幕在线婷婷| 天天做天天要天天爽| 天天爽曰日爽| 99精品无码网站| 99爱精品视频| 情趣视频66| 噜噜国产| 98色花堂98t.R| 亚洲av综合网| 激情色色色| 日本久久精品| 98国产精品综合一区二区三区| 最新高清无码专区| 久久99最新地址| 五月婷婷性爱网| 久久一操| 91超级碰在线| 超碰99在线| 久久激情综合| 天天摸日日舔狠狠添婷婷婷| 丁香五月天天高清在线| 久久婷婷综合五月天| 丁香婷婷色色| 综合久久99| 9色在线| 日逼AV影音先锋男人资源站| 婷婷五月丁香基| 99丝袜精品视频网站| 人妻激情视频| 欧美色色色| 综合狠狠五月婷婷| 日本va欧美va欧美va| 色色日本欧美| 这里只有精品1| 大陆极品少妇内射AAAAAA| 色操综合| 91ncm视频| 美女天天久久| 婷婷色五月情| www.99热这里精品| 婷婷五月天黄色| 五月婷在线| 熟妇国产| www.9797国产| 性色播| 丁香婷婷五月基地| 丁香五月欧美色综合| 婷婷五月天色色| 婷婷丁香五月天之开心少妇| 色天使色婷婷| 色99视| 婷婷五月丁香综合激情| 91chinese在线| 久久性爱网| 九月婷婷色色| 久久久久久草黄色片AV在线观看| 激情综合五月色丁香婷婷 | 国产亚洲AV人片在线| 一区视频网站| 五月综合777| 欧美激情综合色综合啪啪五月| 九九热视频这里只有精品| 日韩青青| 91玖玖| 九月色婷婷综合| 天堂中文国产| 久久久久久久久久久久久9| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 99久久久国产大片| 99久久久| 久久九九99| 性色九九| 玖玖色综合网| 99er6热在线观看精品6| 伊人久久婷婷| 亚洲一级 片内射网站在线观看| 婷婷久久久久| 丁香婷婷综合激情五月色| 另类激情综合| 婷婷丁香九色| 91九色在线| 婷婷十月激情综合网| 天天干电影| 碰碰碰97免费精彩视频| 深爱婷婷基地| 五月天激情久久| 国产高潮A片羞羞视频涩涩| 91九色国产熟女| 丁香激情六月天婷婷| 婷婷久久网| 中文婷婷狠狠| 99色色网站| 噜噜狠狠色综无码久久合欧美| 五月综合激情| 99riAV国产精品视频| 婷婷激情五月综合丁香社| 色色色色色色色色网站| 五月天婷婷色色首页| 狠狠色丁香99| 东京热伊人| 91丨九色丨国产打屁股网站| ss五月天激情| 五月天婷婷綜合院| 91综合视频丁香| 亚洲激情校园| 啪啪激情网| 丁香五月 激情文学| 五月色婷婷影视在线电影| 五月丁香婷婷中文| 色久99| www.六月丁香看AV| 超碰99在线| 日韩九区| 成功精品影院| 麻豆忘忧草午夜| 六月香五月婷| 五月天六月色| WWW.久久久久久久| 九九热最新地址| 久久五月婷天天干| 《战争与艾拉》完整版| 操人91| 天天综合久久| 在线1青婷| 婷婷五月丁香综合网| 久婷婷五月丁香在线观看| 亚洲精品无码久久| 五月天婷婷激情在线色图| 亚洲色婷婷五月| 99超超碰| 一區四區歐美日韓| 婷婷五月激情网| 99热都是精品| 男人天堂99| 久九九热| 在线观看中文字幕| 久久男人网婷婷| 天天日人人爽| 欧美性生交XXXXX无码小说| 久热这里只有精品性色AV| www.婷婷五月天.com| 男人的天堂五月丁香| 激情综合五月开心狠狠| 9久热在线精品| 天天操屄网| 欧美日韩成人h| 99.色| 久久婷婷五月天激情新地址| 激情综合色五月六月婷婷| www.色五月| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 67194国产| 五月婷婷激情四季| 六月色色| 日操| 国产精产国品一二三在观看| 开心丁五月| 丁香五月综合| 99久久66| 任你草| 六月婷婷无码观看| 做爰丰满少妇1313| 天天色,天天操,天天射| 成人午夜天| 操日本人妻视频| 婷婷五月花.97| 五月丁香六月婷婷在线播放| 噢美99| 这里只有精品免费观看网占| 97碰 在线视频观看| 婷婷五月丁香手机在线视频| 97碰操| 日本九九网| 99热国内精品| 色色丁香| 成人深爱丁香五月| 最近中文字幕2019视频1| 密乳视频| 91丁香色五月| 色婷婷五月天偷拍| 九热久| 色五月婷婷中文字幕| 日本女天天爽| 另类小说五月天| 五月丁香婷婷婷婷综合网| 97人碰人操| 五月婷婷六月丁香激情| 婷婷狠狠97| 五月丁香啪啪网| www.国产亚洲69ty.久久久久久久久久久久| 婷婷久久久| 色婷婷a三区麻| 亚洲人成网站999久久久综合| 色五月婷婷五月天| 任你艹| 亚洲爆乳无码精品AAA片蜜桃| 激情色情五月天| 成人丁香五月婷| 超碰av在线| 欧美va国产va| 国产亚洲99久久精品熟| a久久| 天天操天天日天天爱| 老美AA片| 色色色综合色| 丁香五月成人| 黄网在线免费观| 色色色色热| 激情五月天久久丁香| 亚洲日韩操B| 五月丁香影院| 婷香五月网在线| 久热伊人91| 在线观看av网站| 国产永久一二一起草| 九九伦子片| 色五月婷婷色| 激情都市五月天| 色九九九九| 色综合久久888| 99re这里只有精品视频了| 亚洲在线资源| 亚洲中文字幕在线观看| 99亚州综合精品成人网| 任你草| a免费在线| 国产激情AV| 婷婷五月婷婷五月| 14色综合婷婷| 亚洲精品白浆高清久久久久久| 无码任你操| 人妻久久久久久久久妻久久久久久久久 | 大陆肏屄视频| 另类图片天天影视在线观看| 五月婷人妻| 91啪啪啪啪| 五月开心网| 色婷婷五月天偷拍| 六月丁婷婷| 怡红院91a√| www.婷婷六月天| 人人操av| www.五月激情.com| 3p久久| 久久精品A片777777| 婷婷色啪| 99精品在线下载| 色五月琪琪| 色情网综合| 丁香五月欧美| 婷婷丁香人妻天天爽| 亚洲人人96@| 性爱五月丁香| 99热99艹在线观看| 五月丁香婷婷中文| 婷婷五月丁香网| 亚洲另类婷婷五月丁香在线播放| 先锋男人91资源| 欧美内射AAAAAAXXXXX| 婷婷九九| 99视频这里只有精品10| 国产永久一二一起草| 日韩另类在线观看| 欧州婷婷五月天综合| 激情综合亚洲| 激情五月婷婷五月| 综合性视频99| 五月婷婷色| 亚洲无aV在线中文字幕| 婷婷色五月91啪啪| 思思热视频在线| www.夜夜| 丁香五月天激情网| 亚洲激情网站无码| 99九九在线精品热动漫| 一本婷婷丁香久久| 99欧美| 大香蕉五月丁香| 激情五月小说婷婷| 欧美成人网婷婷综合在线| 思思99热这里只有精品| 狠狠情色| 色综合五月| 激情内射人妻1区2区3区| 五月亭亭六月天| 97九色视频| 色丁香五月| 色综合综合色| 狠狠色性| 欧美大奶熟女噜噜噜噜| 色色五月丁香婷婷|