免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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
返回資訊列表
干一干xxxx| 97啪啪| 欧美丁香五月| 俺去也在线www色官网| 五月天婷婷操逼视频| 天天做天天爽| 国产 码在线成人网站| 色性五月天| 色五月激情综合| 日操夜撸| 久久精品永久免费| 天天日日天天| 激情五月天开心网丁香无码| 婷婷五月黄色激情在线| 九九色色网| 玖玖综合色区在线观看| 色婷婷久久| 六月婷婷激情| 另类小说五月天| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 大香蕉久久视频久久视频| 久热69| 五月激情婷婷女| 丁香六月 婷婷六月| 9久操| 色色欧美色色| 成人做爰A片免费看网站找不到了| 五月天婷婷网站888| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 97啪啪| 婷婷色av| 深爱综合网| 美女要搞搞天天搞搞搞网站| 狠狠做五月婷婷| 99爽视频| 五月天丁香网| 五月丁香久久综合| 亚洲五月天天| www国产亚洲色婷婷com| 99re最新地址| 五月天婷婷丁香基地在线观看| www,五月天激情| 性婷婷| 久久五月视频| 婷婷五月天伦理| 99热这里是精品| 超碰成人在线观看| 秋霞午夜理论| 成人做爰高潮A片免费视频| 91se在线视频| 久99热| 67194国产| www超碰| 狠狠香蕉| 精品夜夜澡人妻无码AV| 99热在线观看成人| 六月激情婷婷综合| 六月婷婷五月丁香首页| 久久96热| 婷丁香五月天| 99热综合| 亚洲五月天色色| 五月婷av| 久久婷婷成人视频| 黄色AAAAA| 五月丁香婷婷开心| 97综合在线| 亚洲成人五月天| www五月| 亚洲成人综合在线| 色色色色色色色色色色色色色色,网站| 69热91天堂| 婷婷五月丁香色色| 久久久人妻人伦| 亚洲性天天| 熟女乱论网| 久久这里只有精品视频26| 五月成人网天天| 96丁香六月婷婷蜜桃综合久久| 人人摸人人| 久色| 色日本颜射| 婷婷综合国产| 99re这里只有精品9| 5月婷婷性视频| 99热a片免| av在线免费播放| 99久久九九| 影音先锋91在线资源站| 超碰在线9| 91色在线/日韩| 99re6在线视频精品免费| 99综合色色色| bbwcuckold精品熟妇| 天天开心AV色综合婷婷五月天| 99热久草| 欧美搡BBBBB摔BBBBB| 啪啪操网| 婷婷五月天xxx| 婷婷色色欧美| 五月色综合| 九九色插| 99色热综合| 久久超级碰碰| 久久午夜丁香| 牛牛碰免费| 日韩亚洲视频| 久热69| 五月婷婷久久内射| 五月婷婷激情网| 最新久久99视频网站| 久久视网36| 婷婷五月天堂一本在线| 国产FREESEXVIDEOS性中国| 婷婷色色宗合网| 99热大全在线观看| 丁香五月91| 色情终和网| 91丨九色丨国产打屁股| www999日韩精品| 610018岁成人视频| 激情欧美婷五月| 九九AV在线| 最新无码专区| 色五月成人网| 色综啪啪网| 亚洲小视频免费播放| 99色精品| 久久久久激情网| 极品五月天| 91久久久久久久| 9久热在线视频精品| 99乱视频| 超碰无码318604| 五月情涩综合婷婷| 99久久婷婷国产综合亚洲| 丁香五月天色| 荡乳尤物3HP1V5| 五月天堂婷婷| 久久六月综合| 91精品电影18T| 97啪啪| 九九大香视频| 五月婷婷丁香| 激情五月天无码| 五月天婷婷久久视频| 成人Av在线大片| 五月丁香成人视频| 91碰超| 六月丁香VA| 婷婷综合九色伊人| 成人五月天视频| 91综合视频丁香| 综合激情网| 风流少妇A片一区二区蜜桃 | 超碰1999| 色啪网| 操操碰| 久久婷婷色| 日韩啪啪视频| 色色综合日韩| 五月婷九月| 丁香五月六月激情久久| 色播播婷婷| 4438激情网| 国产精品视频| 五月婷婷六月激情| 五月婷婷开心亚州在线| www.五月婷婷.com| 国产看真人毛片爱做A片| 婷婷五月天a| 99ri网站在线观看| 涩综合网| 五月天全国最大成人网| 9久久久| 亚洲啪啪网| 色五月婷婷综合| 成人AV在线网站| 激情综合五月激情| 色婷婷综合在线| 97亚洲婷婷| 丁香五月婷婷狠狠色| 粉嫩AV久久一区二区三区| 国产26uuu视频| 超级碰 久久9| 日日操夜夜爽| 熟女激情五月天| 国产免费一区二区三州老师F1F1| 无码人妻AV久久久一区二区三区 | 五月丁香亚洲婷婷| 99热国品免费| 色噜久| 五月婷婷中文字幕| 99爱视频在线观看| 五月婷丁香久久久| 九九99精品视频| 激情综合婷婷| 五月天开心网| 秋霞影音91人妻久久| g00d人体西西| 午夜丁香久久久久久| 99精品在线观看视频| 日操| 色999;丁香五月| 日本女色人人| 九九在线精点品| 深爱五月婷| www狠狠| 万月丁香狠狠爱| 色激情综合| 26UUU精品一区二区c〇m| 一区二区免费看| 欧美内射AAAAAAXXXXX| 色婷婷超碰| 亚洲色婷婷99一9|| 丁香六月AV| 久啪欧美| 99久久婷婷国产综合精品| www.91九色| 日日操,天天操| 99色激| 狠狠色婷婷丁香五月| 亚洲超碰在线| 99热国产这里只有精品| 超碰com| 丁香五月欧美色综合| 久热这里只有精品性色AV| 久久国产AV| 国产精产国品一二三在观看| 亚洲婷婷五月天| 九九久久99精品免费观看www| 狠狠操.COM| 天天色播| 啪啪啪大香蕉| 天天日天天舔天天摸| 蜜桃婷婷狠狠久久综合| 五月丁香另类网| 97狠狠色| 久热超碰| 99re这里只有精品国产99| 久碰综合| 综合激情在线| 久久香蕉网| 久久看婷婷| 秋霞av不能| 97久久婷婷色| 98热精品| 九九99香蕉在线视频播放| 婷婷丁香五月在线观看91| 亚洲V国产V欧美V久久久久久| 久久久这里有精品| 精品一二三区久久AAA片| 夜夜撸天天操| 午夜成人片400| 婷婷九月色| 九九色综合九九色| 香蕉AV777XXX色综合一区| 亚洲五月天婷婷| AV在线观看网站| 丁香五月另类色婷婷麻豆| 在线中文亚洲| 色色色色综合| 北条麻妃九九九国产精品视频| 99热国品| 久久九九婷婷| 人人人操| 五月婷婷六月爱| 婷婷综合五月激情| 婷婷丁香五月亚洲| 99精品久久久久| 色哟哟www| 久久98| 99热这里只有精品2| 九九99精品视频在线观看| 九九热精品视频在线观看| www久久99| 色情婷婷| 色色图五月天| 亚洲天堂99| 丁香色六月| 五月丁香婷婷在线综合蜜桃| 丁香五月天av| 大香蕉九操| 天天日,天天插| 色五月激情五月| 午夜成人av在线| 一区二区三区XXXXXX| 日本色99| 99九九精品| 色三级色三级| 懂色av粉嫩AV蜜臀AV| 色综合香蕉| 九九热这里只有精品首页| 久色视频首页| 婷婷五月成人| 610018岁成人视频| 久久久久久久97| 六月色婷婷欧美| 五月天六月婷婷电影| 男女免费视频999| 色婷婷亚洲婷婷| 九一牛视频探花| 99热青青草| 天天色天天爱天天爽| 色爱99| 丁香久久| 99热综合网| 久久99久久99精品免观看软件| 97五月天| 五月丁香婷婷伊人日韩| 99视频久久免费视频| 色色综合网络| 青青草青青草五月天| 久天综合| 天天插天天插| 91美女艹逼网站| 久久丁香婷婷五月天| 激情色视频| 伊人五月天在线| 日本A片一区| 亚洲夜五月| 五月丁香激情综合久久| 亚洲无码 图片区| 激情性爱五月天| 第四色婷婷丁香五月| 色99视频| 一级片sese片.COM| AV五月丁香| 亚洲AV成人精品网站在线播放| 99精品激情| 亭亭玉月丁香| 日本久久极品| 丁香五月天色婷婷| 91久久国产综合久久| 丁香五月天婷婷中文| 99视频内射三四| 婷婷久久影院| 五月婷婷,狠狠操| 大香蕉丁香五月| 26uuu美女三级视频| 色综合久久88色综合天天看| 大香蕉久久草| 久久五月激情综合| 青青草tp| 久久婷婷六月综合| 婷婷五月色播网| 五月天婷婷免费| 国产亚洲色婷婷久久99精品9j| 乱抡小BB| 色五月美女| 激情五月六月丁香| 潘金莲AAAAAAAAAA| www.狠狠艹| 曰本久久女| 色狠狠六月| 六月丁香五月婷婷| 婷婷五月天,影院| 丁香五月大香蕉在线99| 久久婷婷色| 精品亚洲国产成AV人片传媒| 99九九在线视频| 狠狠操狠狠操AV| 婷婷色色丁香| 婷婷色九月| 日本美女上人| 久碰视频| 深爱激情69热| 99亚洲精美视频在线观看| 欧美VA在线| 特黄三级又爽又粗又大| 婷婷五月在线观看| 天天摸天天肏| 白人荫道BBWBBB大荫道| 五月丁香六月婷婷亚洲视频| 天堂亚洲 在线| 成人色五婷婷| 99热久| 六月婷婷色综合| 亚洲激情丁香五月天色| 丁香狠狠色婷婷久久无码视频| 噜噜噜噜噜色| 狠狠色噜噜狠狠狠狠综合| 九九色婷婷| 丁香五月婷婷综合视频| 婷婷五月激情小说| 色情五月综合婷婷| 啪啪啪五月天| 99精品国产在热久久婷婷| 超碰在线免费| 精品少妇蜜臀91| 久久全色| 色色色com| 白天AV月月| 激情婷婷五月综合| 性色五月天| 色五月天成人在线| 亚州操操| 五月婷婷涩涩爱| 天天插天天插天天插天天插| 激情网第九色| 欧美日韩色色| 人妻久久久久久久 | 亚洲狠狠狠| 99久久久久久www| 开心深爱激情网| 丁香五月天的网址。| 色女人久久| 久久综合婷婷| 色色五月天婷婷丁香| 青青.com| 久久亚洲天堂| 人妻第九页| 婷婷久久综| 欧美性爱特黄一级aaaassss| 亚洲精品影视| 五月丁香啪。| 伊人大香蕉爱聚| 婷婷五月av| 99视频网| 先锋资源 996| 五月天激情综合网俺也去| 99久久超级| 色色色无码| 六月丁香婷婷五月| 丁香5月综合啪啪| 中文字幕97超级碰| 激情五月婷色| 97在线观看| 99色在线观看| 色五月婷婷五月天| 婷婷五月天精品| 欧洲亚洲最新精品| 去干网av| 色婷婷久久久| 久久98热re| 久久婷五月影院| 亚洲无码99| 99九九热在线观看| 五月婷婷五月天| 第四色婷婷五月| 久久综合99| 91九色中文字幕女在线观看| 丁香天堂夜| 99久久超级| 亚洲激情久久| 少妇熟女视频一区二区三区| 婷婷丁香五月综合| 五月婷婷色色| 91丨九色丨大屁股| 99热最新| 五月婷婷啪啪| 五月婷婷久久综合| 色噜噜婷婷| 亚州操人在线视频| 婷婷视频网| 婷婷五月丁香基地| 五月天激情视频| 狠狠爱综合网| 久久久久9999| 日99网站| 久久天堂女人| 中文在线成人| 久久久.COM| 成人综合视频在线| 婷婷久久网| 91精品久久久久| 久久狼人天堂| 俺也去婷婷五月天第五色| 99re99热| 激情图片婷婷| 中国激情网| 六月丁AV| 激情久久丁香| 天天日天天干天天操| 99热这里只有精品4| 26uuu欧美| 婷婷色网| 丁香影院五月综合| 色婷婷瘦婷婷日韩| 99色综合网| 色五月丁香激情视频| 五月婷婷m| 六月丁香好婷婷| 婷婷开心激情五月激情网| 26uuu最新地址| 日韩 中文 欧美| 久久九九99| 日本乱子人伦在线视频| 67194线路二在线观看| 欧美高潮9| 99久久婷婷五月综合| 色五月色五天色情网| 九九蜜臀精品| 在线可以看的av网址| 99re这里只有| 丁香五月天激情| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 天海翼中文字幕高| 99日精品视频| 六月丁香婷婷开心综合基地| 五月天婷婷免费视频| 欧美一级色| AV大片在线播放| 五月天婷婷涩涩| 激情久久五月天| 97丁香五月天| 激情五月六月| 夫妇交换刺激做爰| 色五月色图| www.婷婷五月天啪啪| 五月丁香欧美综合| 激情综合网五月激情| 色五月婷婷777| 三级毛片7979| 26uuu亚洲欧美| 大香蕉婷婷色| 9色免费网| 精品在线| 五月丁香久| 男人先锋久久| 精品国产va久久久久| 噜噜色婷婷| 99热久久这里只有精品| 久久六月天| 久色资源网| 亚洲色婷婷| 久久大香蕉同僚| 欧美性色五月天| 永久精品| 精品99在线| 啪啪六月婷婷| 亚洲春色奇米影视| 丁香五月丐人妻| 色婷婷综合亚洲| 91碰免费视频| 六月婷婷私欲| 日本一级一级一级一级| 91狠狠综合久久| 久久这里只有精品热在99| 麻豆AV一区二区三区| 久久精品婷婷| 日本久久天堂| 亚洲天堂爱爱| 99九九精品视频| 亚洲精品444久久久久久| 五月天色官网| 国外亚洲成AV人片在线观看| 久久九九免费大视频| 欧美精产国品一二三区| 国产免费av在线| 婷婷香五月天| 99色.com| 五月婷婷九| 无码一级片| 天天日日夜夜爽。| Y11111111111少妇电影院| 五月婷婷免费在线观看| 2025超碰| 日韩在线aaa| 91热视频| 亚洲天天| 日韩在线一级| 丁香婷婷色| 婷婷操超碰| 久热AA| 色五月婷婷综合在线| 五月婷婷婷丁香播| 五月天婷婷基地综合网| 日本片日本片祼观看网站在线看中文版网页在线看 | 亚洲av综合网| 色色五月天丁香| 欧美大道不卡| √天堂资源在线人妻熟女| 桃色五月天| 日本少妇AA一级特黄大片| 日本操B视频| 婷婷综合伊人| 婷婷五月天Av| 操人无码| 91一起操| 天天天摸夜夜夜玩| 九九热99久久99| 99成人| 探花搜索结果 - 黄上黄| 婷婷丁香五月婷婷| 婷婷99| 99色热| 九九热只有这里是精品| aaaa久久| 中文字幕 中文字幕明步| 欧美日比视频| 色色色色色网| 91视屏在线观看com.wwwvv| 亚洲欧美综合7777色亭亭| 色综合网综合| 激情性爱五月| 婷婷精品视频| 色情五月天A片| 婷五月天丁香婷五月| 在线网黄| 久久这里都是精品视频| 亚洲无码猫咪| 天天操中文字幕| 久久久久亚洲A∨成人乱码电影| 六月色婷婷| 婷婷五月天第三页| 91chinese在线| 久操热线| 综合色播| 熟女婷婷网站一婷婷五月一丁香婷婷一婷婷激情网| 激情五月婷婷综合网| 夜夜操天天干| 97人人干人人操| 婷婷色色网站| 五月停停999| 很很干在线视频| 97日日碰碰| 开心激情网在线| 99国产性感视频| 婷婷爱爱蜜臀天天操| 熟妇人妻中文字幕无码老熟妇| 丁香色情五月综合网站| 婷婷涩五月| 99视频热99| 成人av在线电影| 天天日天天日天天搞| 丁香婷婷五月六月久久| 超碰在线50| 五月丁香久久综合| 五月婷婷之美女图片| 五月丁香六月婷婷精品| 婷婷色综合网日韩国产| 日本99视频| www.婷婷五月| 六月亚洲| 丁香五月香蕉在线| 六月丁香成人| 丁香五月性爱| 亚州操操| 人草人人| 996热re视频精品视频这里| 国产成人高清| 五月丁香九九| 大香蕉五月婷婷丁香| 丁香五月首页| 伊人玖玖婷婷| 99热这里精品| 婷婷成人基地| 久久人人看| 99在线精品视频| 色婷婷丁香五月天激情综合网| 激情婷婷五月天。| 色女人久久| 国产第99页| 国产精品日本一区二区在线播放| 激情五月婷婷综合| 成人片在线播放| 久久综合人妻| 五月天激情视频| 激情五月婷婷综合色播小说| 久久综合网免费视频| 婷婷人人操| 五月丁香婷婷色播无码| 超级碰碰一区| 免费色婷婷| 欧美色激情四射| 中文字幕丰满孑伦无码专区| 大地资源色婷婷视频在线 | 九九精品片一| 99这里有精品久久97| 色999五月色| AV色婷婷| 久久婷.com| 日本精品99网站| 欧美啪啪9| 婷婷五月大香蕉| 婷婷五月丁香欧洲| VA色婷婷| 99色在线| 欧美激情 日韩无码 婷婷 五月天| 激情五月综合网| 色色色婷婷五月| 五月婷婷激情综合| 九九热亚洲中文在线观看免费| 看婷婷五月天网| 婷婷五月丁香基地在线视频官网| 91chinese在线| 六月欧美综合色情| 啪啪五月天啪啪| va亚洲中文在线| 色婷婷基地| 欧美狠狠色| 色婷久九| 这里只有精品免费视频| 大伊香蕉精品视频在线| 91人妻人人操| www.jiujiujiu| 九九人人操| 春色激情第四色| 婷婷五月伦理| 天天爽天天| 五月天婷婷丁香| 国产日韩欧美| 墨西哥毛片内射精| 在线观看亚洲视频影院| www.91操| 日本色婷婷综合| 婷婷中文字幕版| 色无码| 五月丁香婷婷久久| 日曰躁夜夜躁2026| 2022人人操人人看| 99热这里只有精品在线免费| 婷婷涩五月天综合| 色婷婷网| 影音先锋91网站在线观看| 欧类av怡春院| 色婷婷91| 五月激情视频网| 99热| 色综合天天| 色五月婷婷1| 婷婷丁香人妻天久久| 少妇人妻综合色6699| 日韩性视频| 激情综合网激情五月婷婷| av线电影| 蜜臀嫩草| 五月婷在线观看| 国产在线网| 九九激情网| 日韩欧美一级大黄网站| 五月婷丁香| 1024你懂的欧美曰韩| 婷婷丁香五月天色播网站| 色色色图| 婷婷大香焦| 五月丁香综合激情| www.婷婷五月天.com| 啊v视频在线观看| 99亚洲视频| 婷婷丁香激情五月| 99九九精品| 婷婷五月色情| 战争与艾拉电影免费观看| 精品人妻一区| www.久久婷婷| 婷婷激情五月色综合| 欧美色色色| 草草视频91| 思思热视频| 婷婷丁香五月视频| 天天激情视频| 婷婷色色五月| 午夜天堂啪啪| 91干视频| 午夜丁香 婷婷| 色国产五月| 五月色亚洲| 久久婷婷亚洲无码一起| 一区二区三区四区无码| 九九黄色网| 亚洲国产精品成人免费一区久久久在线观看AAAA | a性生活久久无| 色爱综合视频| 激情婷婷五月天| 操操国产| 激情五月天综合网| 《久久综合九色综合97婷婷| 久热播这里只有精品| 亚洲三A| se色99| 五月香婷婷| 高清国产一级婬片a免费| 久久九精品| 99视频热99| 99re26视频| 色欲五月丁香| 色人妻五月| 婷婷9月天| 五月天电影网| 日韩啪啪自拍| 99热这里精品| 日本色久| 五月丁香操婷逼| 操碰91| 美日韩成人| 日本激情ⅩXX免费视频| 日韩精品无码一区二区| 综合图区激情| 九伊人网| 99热在线观看精品| 噜色精品| 91碰碰碰久久久久| 久久电影4399| 激情无码五月天| 成人.在线日韩| 国产婷婷色综合AV蜜臀AV| 亚洲超级碰| 26uuu| 东北婷婷五月天| 丁香五月激情啪啪啪| 五月婷婷69| 色综合久久天天综合网| 婷婷五月激情中文字幕| 天天狠狠色噜噜| 五月丁香婷婷激情图片| 玖玖99免费视频| 色色综合网站| 97色五月婷婷在线| 婷婷五月六| 日韩ac不卡无码| 色色综合网站| 色色免费网战视频| 在线中文亚洲| 97高清国语自产拍| 九九亚洲视频| 亚洲天堂久久| 色情终和网| 日韩成人AV在线播放| 色色五月婷婷久久| 欧美日本韩国亚洲| 久久婷婷五月综合色播| 丁香 久久| 成人网在线视频| 天天干天天日日| 久777| 精品爆操| 思思热热久久| 中文字幕九九九九| 日韩久久系列| 欧洲亚洲免费视频9| 亚洲人妻一区二区| 性色婷婷| 五月婷护士| 九九操操| 亚洲精品激情| 国产中文亚洲欧美日韩性交| 91人人爽人人操| 欧洲色| 激情深爱五月天| 亚洲婷婷月丁香五月| 欧美日韩国产一区| 黄网在线免费观| 久久婷婷影院| 丁香激情综合| 日批在线看| 伊人久久大香线蕉av一区| 少妇人妻偷人精品无码视频新浪| 丁香五月天激情综合| 色五月五月天| 国产亚洲在线观看| 日韩av网站在线观看| 成人综合网站| 九九热在线观看视频| 婷婷五月天在线综合| 婷婷5月开心6月| 狠狠爱婷婷爱| 日本三级网址| 亚洲无AV在线中文字幕| 99操逼| 偷拍91九色| 激情五月亚洲| 久久奄也去色色网站| 成人在线网| 超碰成人av| 日本色超碰| 色婷婷丁香花五月天| 俺去也综合| 97资源碰碰| 日韩啊啊啊| 小视频久久久aaa| 激情五月最新网址| 男女99免费视频| 激情久久久久久久久久久| www.综合久久| 亚洲激情另类| tingtingzonghewang| 久草嫩草在线观看| 五月天婷婷色播在线网| 超碰熟女农村在线69| 超碰人人草| 人妻av在线| 久操大香蕉| 久久婷婷激情| 97色色网| 久热91精品| 五月综合视频| 婷婷五月天熟妇| 狠狠五月激情婷婷直播片| 五月丁香色狠狠干大屄| 婷婷色天香| 五月天婷婷青青| 婷婷激情五月天激情在线| 888精品福利地址| www.久久爱| 亚洲无码成人网| 九九热这里只有精品7| 久久久久久欧美精品se一二三四| 激情九月综合| 五月丁香综合啪啪| aaaaaa片| 婷婷激情五月天网站| 干亚洲天堂| 九九九九九无码| 夜夜操少妇| 99热精品一| 丁香婷婷视频在线| 丁香激情五月天| 99热精品在线播放| 色爱五月天| 精国产品一区二区三区A片 | 激情久久丁香| 色婷婷大香蕉| 26UUU一区二区| 丁香婷婷六月天| www.人人操人人看人人想人人摸 人人人人操,COM | 少妇水多A片太爽了| WwW色婷婷| 日韩久操婷婷| 91一起艹| 操操操av| 激情五月丁香五月| 激情综合色| 精品人妻伦九区久久AAA片| 天堂久久丁香| 五月丁香婷婷啪啪网| 久久99久久久久久| 2020久久婷婷五月| 噜噜狠狠色综无码久久合欧美| 丁香 久久| 久久婷婷五月天| 日本久久极品| 欧美性爱五月天| 色色网站免费观看| 色噜噜狠狠色综合日日| 天天干一干| 天天爱天天天射AV| 噜噜干日本| 亚洲精品性色| 婷婷五月综合网| 午夜天堂一区人妻| se99热久久一本| 五月停停直播| 99精品亚洲| 五月婷婷色| 桃色成人网| 五月丁香色| 丁香综合网| 亚洲网站999| 久久婷婷五月天激情新地址| 欧美网站视频4399| 少妇口诉沐足视频播放器网址| 色综合激情| 丁香久久| 国产成人高清| 五月婷婷免费视频| 午夜一区| 91黄色五月天视频| 婷婷五月激情热播| 丁香五月天激情网| 久久久婷婷| 激情综合99| 思思热再线视频| 五月天桃色深爱网| 五月色情婷婷| 色婷婷六月综合| 婷婷射图| 岛国午夜视频| www,五月丁,com| 99热免| 婷婷伊人75| RenRenSe在线视频网站| 色色色综合色| 依人大香蕉在钱1| 欧美色图45678| 欧美色色色色色色| 五月婷婷久久爱| 黄页大全十八禁| 性爱视频99| av在线激情| 丁香五月婷婷在线| 五月激情四射网站| 五月丁香五月激情综合色综合| 男人的天堂五月丁香| 成人va在线| 五夜婷婷| 五月天丁香网站| 亚洲成人网站在线| 婷婷射婷婷舔| 抽插特写| 五月天激情婷婷五月天久久| 激情四射五月天| 99热九九这里只有精品| 丁香五月AV| 色五月激情综合| 99精品在这里| 大香伊人婷婷| 婷婷无码五月天| 大鸡巴伊人网| 成人五月天视频播放| 日日操夜夜擼| 五月丁香六月婷婷a v| 夜夜操加勒比| 激情婷婷五六月天| 婷婷五月综合在线| 99热免费网站| 91狠狠综合久久| 日本va网站| 午夜不卡久久精品无码免费| 激情亚洲色图片丁香综合| 婷婷香草网| 在线色五月婷婷| 97啪在线观看视频| 亚洲成人黄色网| 亚洲综合色成丁香五月色| 婷婷五月噜噜| A片天天| 日本熟女内射| 蜜臀99久久精品久久久久| 天天色视频| 丁香六月婷| 97色婷| 色爱综合视频| 牛牛澡牛牛爽| 中文字幕 中文字幕明步| 久久视频婷婷| 六月婷婷激情图片| 婷香五月网在线| 操一区| 深爱激情五月天婷婷网| 国产免费av网站| 丁香五月人妻| 97久久久| 久久五月婷6 9| 亚洲激情免费视频| 98永久精品| 大香蕉精品视频| 天天爱天天做天天舔| 丁香婷婷五月色综合| www天天色天天射| 亚洲综合网 665566| 99超级碰碰| 婷婷五月天中文字幕.| 91夫妻视频| 五月婷婷激情久久| 激情四射五月天| 五月天久久色| 日日色综合| 婷婷偷拍网| 久99在线| 丁香五月先锋| 午夜 外网 精品 在线| 91国产精品视频播放| 99九九在线观看免费| 激情综合网,婷婷| 日韩av在线播放综合网| 激情九月综合| 日日操人人操| 成人中文字幕在线| 极品人妻VIDEOSSS人妻| 91精品综合久久久久久五月丁香| 在线成人网站| 97人人干视频| 丁香婷婷五月色成人网站| 国熟女视频| 非洲一级AV| www.色五月| 丁香五月香蕉| 天天色月| 亚州色综合| 国产毛片欧美毛片久久久| 色五月婷婷色五月| 天天色天天爽| 99九九中文字幕视频| 成人日韩欧美| 色综合大香蕉| 婷婷瑟瑟五月天| 中文字幕永久在线| 午夜日韩久久久网站| 国产古装妇女野外A片| 五月婷婷五月色| 久热这里只有精品66| 久99热| 无码人妻一区二区一牛影视| 91久久久久久| 五月天成人在线播放丁香| 色噜噜狠狠色综合AV兰草影视| 日本欧美啪啪| 婷婷丁香五月综合| 亚洲精品国产setv| 天天爽天天爽视频| 五月天激情小说电影| AV操逼网| 亚洲色图日韩网址| 热91久| 99色在线| 99啪啪视频| 五月丁香六月婷婷无码| 免费试看小视频 99| Av狠狠色丁香婷| 天天操中文字幕| 9热久久| 操逼视频网址| 六月婷婷综合| 激情五月天社区| 丁香六月婷婷综合啪啪| 激情五月六月丁香| 色色色精品无码区| 99啪| 久久久宗合| 色玖玖玖| 国产又黄又爽又色的免费| 思思热在线播放| 国产操碰| 思思热在线播放| 四月婷婷丁香| 久久人妻高清中文| 婷婷五月天激情偷拍| 久久久久久天天日天天爱| 婷婷五月综合在线| 91九色 婷婷| 操逼三区| 色婷婷五月在线| 91丨九色|PRNY熟妇| www狠狠com| 色玖玖玖| 亚洲AV另类| 亚洲一区二区无遮挡A片| www亚洲无码| 亚洲精品又粗又大又爽A片| 亚洲色婷婷五月天| 久久久免费精彩视频| 国产这里只有精品| 亚州操操| 九九黄色网| 99精品色| www夜夜操| 97热在线精品| 丁香五月天黄色片| 99噜噜| 9久热| 99色综合| .精品久久久麻豆国产精品| 少妇人妻偷人精品无码视频新浪| AV片一区在线观看| 中文字幕乱码亚洲精品一区| www.91av.com| av五月丁香| 色九九丁香九月色九九色| 超碰不卡在线| 色五月婷婷婷婷婷婷婷婷婷婷| 色啪网| 国产va在线视频| 天天橾夜夜爽| 午夜丁香婷婷| 婷婷午夜激情| 天天弄天天操| 丁香五月欧美| 超碰只有精品在线| 综合久久首页| 超碰在线免费| 天天日天天舔天天摸| 这里只有精品99www| 真实亲子乱子伦高清在线观看| 色色色热热热| 人妻久久久久久| 亚洲激情四射色| 壅壅儕家a| 色五月天激情| 天天干肏夜夜| 五月亭亭直播| 天天操天天曰| 91人妻九色大屁股| 九艹在线| 色婷五月婷婷| 激情五月综合网最新| 欧美色99| 色婷婷激情| 久久人视频| 婷婷五月综合婷婷| 五月天激情综合10p| 久久综合丁香| 无码AV免费精品一区二区三区| 思思re99视频在线观看| 婷婷不卡基地| 久久99久久99精品免视看婷| 天天干天天操天天上| 五月天开心婷婷激情网站| 色情成人五月天| 97sese婷婷| 97色碰| 五月天亚洲综合网| 精品色色| 97人人看一| 色综合xx| 丁香五月日韩| 影音先锋男士资源网一区| 永久免费视频| 欧洲第一久色| 五月婷婷中文字幕| 99A片| aaaaaa片| 99毛片| 五月婷婷伊| 大香蕉九九| 五月丁香六月在线| 97精品人人A片免费看| 亚洲人妻Av| 夜夜综合色| 大战熟女丰满人妻AV| 国产精品成人AV在线| 深爱五月亚洲| 三级三久久线久久99久目本WW| 日韩AV在线免费观看| 亚洲看av的网站| 九九成人| 色色色综合色| 亚洲狠狠干| 国产特级毛片AAAAAAA高清| 婷婷激情九月| 欧美激情综合色综合啪啪五月| 日日操天天操| 成人五月天丁香| 五月综合视频| 热久久婷婷| 天天操夜夜夜拍拍拍| 色色色色热| 99视频久久| 久久五月天视频| 婷婷五月丁香99| 九九操综合网| 国产精品人人做人人爽人人添| 无码色色色色色| 思思99热| av免费在线网站| 色五月天成人| 午夜丁香| 色婷婷手机在线| 九九热免费| 超碰成人免费| 久久3p| 99人人操人人操人人精| 四月丁香五月婷婷久久| 91传媒无码人妻精| 午夜无码精品色综合久久| 精品一二三区久久AAA片| 激情五月伊人婷婷| 激情婷婷五月| 99热日韩| 99爱爱| 99久在线精品99re8热| 综合网色| 日本黄色在线观看| 1010日日无码| 欧美69久成人做爰视频| 九九免费精品在线视频| 婷婷五月天激情小说| www.综合久久| 91成人看片| 激情九月综合| 国产精产国品一二三在观看| 午夜九九九九九九九九九九九九九| 五月婷婷黄| 99精彩视频| 综合爱久久|