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
返回資訊列表
开心五月婷婷婷美女| 色色色在线播放| 九色91国产| 热久久91| 91精品无码久久久久久五月天| 婷婷五月天激情小说| 26uuu亚洲色| 久久思思99| 日狠狠| 九九成人精品| 精品五月视频婷婷在线观看| 激情久久网| 99欧美| 狠狠xx| 久久草大香蕉| 亚洲愉拍99热成人精品| 五月天之色情综合网| 婷婷激情图片| 色婷婷狠狠爱| 五月婷婷中文字幕| 亚洲色图五月丁香| 七七九色| 色情五月婷| 婷婷婷五月天最新综合你懂的| 91精产品自偷自偷综合| 丁香花婷婷五月天| 久久33视频| 91中文在线| 色99热| 狠狠草综合网| 人人舔天天| 亚洲区,视频区,视频区免费| 色10月婷婷视频| 999久久久国产精品| 五月天婷婷婷| 七月丁香婷婷 色色| 69色婷婷| 欧美啪啪五月天| 丁香五月之久操视频| 五月天久久久| 玖玖婷婷五月天| 99婷婷国产最新视频| 五月激情综合深爱| 天天激情站| 日日噜狠狠色综合久久| 精品久久66| 啪啪啪五月天| 色五月成人在线| 岛国资源网| 天堂婷婷五月色| 色色色激情| 狼人狠狠操| 色yeye色综合| 天堂色色色| 高清 码 免费看片短视频| 国产免费av在线| 肏日网在线看| XX久久| 综合玖玖偷拍| 超碰99久久| 狼友超碰| 99热在这里只有免费精品| www狠狠| 五月天婷婷免费| 99久久亚洲国产| 另类图片五月天激情| 激情五月婷色| 91操片| 免费亚洲婷婷中文字幕| 婷婷五月天Av| 天天干天天拍| 五月天大香蕉| 五月丁香综合网| 免费操超碰| 亚洲操B视频| 天天爱天天操| 99热最新| 九色无码| 五月综亚洲| 丁香五月色情| 久热久| 国产做爰视频免费播放| 中文网婷婷字幕婷| 五月婷婷色男女| 婷婷激情区| 99热成人在线观看| 激情综合网五月| 国外亚洲成AV人片在线观看| 性爱五月丁香| 色情久久久| 99热这里只有精品86| 成人在线99| 色欲天天综合| 色九月综合| 欧美VA视频| 国产乱码久久| 色综合色色色| 中文毛片无遮挡高潮免费| 日比视频91| 五月天婷婷AV| 色99综合视频| 激情五月婷| 北条麻妃九九九国产精品视频| 色婷婷亚洲综合天堂| 久久刺激网| 婷婷在线操| 五月激情婷婷丁香| 无遮挡国产高潮视频免费观看| 免费看片在线观看| 深爱五月天 开心网| 久久综合人妻| 1024在线一区| 爱之国产色情综合| 色香蕉影院| 欧美情色电影一区二区| 久久综合激情五月天| 天天摸人人摸| 超碰99热精品在线| 狠狠操狠狠狠| 欧美丁香婷婷天天操| 欧美噜一噜| 婷婷五月天亚洲综合| 五月综合色| 丁香五月天激情四射网| 五月婷婷之综合激情| 开心激情综合| 婷婷五月天综合激情| 26uuu欧美日本| 99操视频| 日韩成人网站精品久久大全| 99热这里只有精品55| 五月丁香婷婷啪啪综合| 综合久久五月天| 色狠狠色噜噜AV天堂五区| 久久婷婷网站| 99精品热视频| 玖热精品综合视频| 操一操干一干| 99爱视频精品在线观看| 色综合天天综合成人网| 91啪啪| 久久婷婷五月综合啪| 黄色片avv| 五月婷婷六月丁香激情综合网| 日本激情91| 激情五月九九九| 亚洲AAAA网| 九九精品热| 久久大香蕉同僚| 五月丁香在线看| 婷婷五月丁香激情| 婷婷婷婷婷开心无码播放| 国产做爰视频免费播放| 中出内射的人妻视频| 亚洲经典三级| 99国产性感视频| 婷婷丁香中文字幕| 噜噜色婷婷| 欧美日本国产| 五月丁香六月玩女人| 九九精品9| 4399无码视频| 婷婷丁香五月亚洲| 玖玖婷婷色五月| 天天综合网在线| 亚洲婷婷综合视频| 日韩在线9| 久久超视频| 久久精品系列| 无码se| 婷婷色影院| 色婷婷五月开心六月综合| 色五月激情| 另类图片色五月| 综合久久综合| 五月丁香六月婷婷中合网| 五月丁香啪啪| 精品A√| 99热久久日本| 久久免费精彩视频| 五月开心深爱激情网| 色婷婷色和| 丁香五月激情综合| 五月色情婷婷开心五月色情| 久久久噜噜噜操操操| 六月婷婷色综合| 激情丁香九九五月综合网| 九九色人| 99视频网| 色婷丁香五月| 狠狠色狠狠爱| 欧美电影在线播放| 日韩在线99| 五月天婷婷xxx| 在线观看免费视频| 五月婷婷熟女| 噜噜久| 欧美天堂久久| 超碰妻人人| 婷婷丁香六月| 婷婷五月开心中文字幕在线| 国产精品99久久久久久猫咪| 丁香五月之久操视频| 这里只有精彩视频| 亚洲十月婷婷综合| 五月天激情国产综合婷婷婷就去爱| 欧美性生交XXXXX无码小说 | 97干在线| 亚洲五月花| 97操视频| 視频福利乱色| 婷久久高清| 99热啪啪| 五月丁香欧美综合| 五月婷婷丁香婷婷| 五月丁香六月婷婷综合伊人| 激情桃色网 | 99色| 九九热免费视频| 亚洲热久久| 亚洲婷婷视频| 91欧美日韩综合| 婷婷碰碰| 一起草AV入口| 91精品久久久久久77777| 开心婷婷五月| 激情五月天小说| 五月综合激情久久| 五月丁香狠狠爱| 亚洲视频码| 丁香婷婷激情| www.色五月| 特级西西4444www无码| 狠狠狠婷婷五月综合| 久久99久久久久久久噜噜| 天天插天天插| 99色在线视频| 裸体做A爰片毛片A片免费| 欧洲一区二区| 久婷婷婷| 婷婷色网站| 99爱视频在线观看这里只有精品| 亚洲综合狠狠艹| 五月丁香久人妻中文| 久久婷综合网| 欧美啪啪9| 日本专区久久| 久久久A级视频| 97涩婷婷| 97精品综合久久内射| 五月天婷婷色播综合在线| 99无码精品| 在线播放成人网站| 91狠狠综合久久久久久| 蜜桃五月天| 97人人射| av亚洲国产小电影| 国产女生爱爱AA| 亚洲mm免费| 青柠影视免费高清电视剧| 看片视频在线免费日产在线看| 亚洲av综合网| 五月婷丁香| 亚洲无码99| 丁香五月欧美| 五月婷三级片| 色涩影院六月丁香| 亚洲综合1024| 婷婷六月丁香激情综合| 免费观看欧美成人AA片爱我多深 | 五月婷婷丁香五月婷婷| 色停停五月天| 免费亚洲婷婷中文字幕| 色婷婷电影网| 婷婷五月丁香第四色超碰在线 | 激情无码网| 日本一毛片| 婷婷黄色| 婷婷开心青青草| 天天狠狠色| 综合五月激情网| 99热99色| 天天拍天天操| 成人视频免费观看高清完整版在线观看| 亚洲一级 片内射网站在线观看| 丁香五月婷婷五月基地| 午夜激情婷婷| 九九久久99| 五月深爱网| 日韩五月丁香| 免费亚洲婷婷| 人妻在线网站| 九九热免费观看视频| 99热在线中文字幕| 婷婷五月色色| 久久精品国产一区二区三区四区| 99偷拍视频在线日本| 婷婷亚洲综合| 九九色综合视频| 久久玖玖综合| 这里只有精品96| 琪琪色影音先锋| 成人短视频在线| 色综合久久伊伊婷婷五月| 天天做天天爱天天玩夜夜爽| 婷婷六月色| 久久久久久久久月丁| www.日本91| 蜜桃婷婷五月| 六月丁香婷婷综合狠狠爱夜夜爱| 国产精产国品一二三在观看| 色五月天激情| 亚洲另类视频| 大香蕉220| 综合色色综合| 天天做天天爱天天做| 久久曰曰| 欧美在线视频99| 激情五婷网| 女人天堂AV| www.五月天婷婷| 欧美成人猛片AAAAAAA| 99在线爽| 淫水导航| seav天堂| 激情q青青草在线婷婷| WWW,五月| 五月婷婷丁香日韩在线| 中文字幕 久久9999| 91久久久久久| 91九色欧美| 久热这里只有精品99re,久热这里只有精品7 | 99热在线精品播放| 99视频在线精品| AA片在线观看视频在线播放| 天天做天天要天天爱| 久久成人人妻| 啪啪日热| 五月婷婷婷婷婷婷艺术| 日本不卡一区二区三区| 99热国产这里只有| 激情六月天| 婷婷操久久| 成人性爱无码| 久久99激情五月天| 色吧五月婷婷| 天堂在线婷婷| 色综合激情| 99综合五月免费视频色婷婷| 亚洲一区二区无码蜜乳av| 日本丁香五月| 激情五月天婷婷激情| 婷婷色操| 91色综合网| 日日爽夜夜爽| 91视频免费后入强操| 五月婷婷啪啪啪啪| 99久久五月婷婷| 婷婷五月天亚洲精品| 九九热免费视频| 国产xxxxx在线观看| 91seav| 1024成人在线观看| 久久 婷婷 五月天| 久久九九综合| 日韩啪啪网| 超碰人人草| 丝袜人妻| 午夜爱爱爱成人| 天天射影院| 天天操天天爽天天爱| 激情五月天婷婷| 婷婷丁香五月天综合网| 91九色超碰| 五月丁香六月婷婷视频| 久久视频婷婷| 婷婷深爱五月天| 久久五月婷婷电影| 久久五月天激情| 色婷婷在线视频综合| 久777| 丰满熟女人妻一区二区三| 婷婷六月久久| 久久九九免费视频| 亚洲综合婷婷六月丁香五月| 色婷婷在线影院| 伊人网大香| 色五月综合激情| 激情小说婷婷| 日韩精品二三区| 影音先锋91| 任你爽视频| 色五月天中文字幕| 五月天婷婷丁香人人操91| 五月丁香婷婷导航视频| 操操操www.com| 婷婷五月欧美综合| 丁香五月天堂网| www.婷婷亚洲基地| 久久综合99综合| 激情第四色| WWW.天天日| 国产69久久久欧美黑人A片| 婷婷情色激情| 丁香五月婷婷亚洲人| 国产乱子轮XXX农村| 五月婷六月| 久操大香蕉| 99ER热精品视频| 日日爽日日| 色五月婷婷av| 超碰成人在线免费观看| 4399成人黄A片| 伊人色综在线| 五月丁香爱婷婷深深| 丁香五月天AV在线| 激情五月丁香婷婷| 五月婷婷激情中文字幕| 五月丁香亭亭天天舔| 91凹凸在线| A片试看120分钟做受图片| 狠狠狠色激情综合适合| 日日夜夜爽爽| 婷婷五月俺要去| 丁香婷婷超碰| 99久99久| 国产婷婷色综合AV蜜臀AV| 五月天婷婷激情在线色图| 久久久婷| 色综合色五月| 久婷婷五月天影院| 日本nghangse中文字幕| 亚洲亚洲人成综合网络| 激情第四色| 性爱视频久久| 在线1青婷| 精品婷婷五月天| 婷婷中文在线| 伊人久久大香网| www.cao.com久久| 色五月激情五月| 丁香色五月 97干| 可以直接看的av| 99视频在线观看视频| 91丨九色丨43老版熟女| 91婷婷在线| 伊人综合婷婷| 2013AV天堂| Www.久久| 九九久久偷拍| 婷婷六月久久| 色吊丝99| 一区=区操屄高清大全av| 夫妇交换刺激做爰| 人与禽A片啪啪| 四色99久久| 国产精品国产| 成人av在线网站| 另类 在线| 五月丁香天堂网| 五月情涩综合婷婷| 丁香成人色情五月天| 五月天玖玖狠狠色色| 丁香五月第九色| 开心久久xxx色| 日韩欧洲亚洲| 欧美色色色色色色色色色色影视| 亚洲俩性性爱图片久久第六页| 久久婷婷五月天激情新地址| 日韩砖区| 久久婷婷亚洲五月天| 天天干狠狠操| 色婷婷综合网站| 激情5月天天天| 99热99这里有免费的精品| 啪啪啪啪五月天| 色五月婷婷视频| site:ornaments52.com| 美女天天爽| 99国产精品久久久久久久久久久 | 亚洲无码yw| 婷婷五月,偷窥偷拍网| 日本九九视频| 色色亚洲| 婷婷丁香五月天综合激情| 婷婷五月激情基地| 九九色天堂| 色婷婷国产精品综合在线观看| www.99热在线观看| 女人天堂av| 去干网最新版本亚洲版| www.天天干| 人人操日| 中文字幕有多少字| 激情五月色综合网| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 婷婷99综合| 狠狠狠狠青草| 国产亚洲在线| 十月丁香九月婷婷综合| 久99热| 久久在线视频免费观看| 丁香社92视频| 激情丁香婷婷六月天| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 91精品久久久久久77777| 岛国在线观看91| 婷婷的色色五月天| 五月婷婷开心激情六月蜜桃| 久久丁香五月| 大战熟女丰满人妻AV| 狠狠爱婷婷五月天| 激情另类综合| 天天爱天天吃狠天天透| 97人人超| 综合色网站| 99这里只有免费的精品| 99ri视频在线观看| 色五月激情视频在线综合| 色婷婷五月婷婷五月婷婷五月| 噜噜噜久久亚洲精品国产品91| 五月丁香琪琪| 激情五月天色色色| 亚洲婷婷丁香五月天激情小说| 五月婷婷在线播放| 熟妇内谢69XXXXXA片| 色五月婷婷大香蕉| 天天狠狠色噜噜| 999热在线视频| 久综合4| 激情视频婷婷五月花| 亚洲色无码| 九九热最新| 97亚洲婷婷| 人人操人人爱丁香五月| 日日干夜夜干| 亚洲五月天,激情视频| 综合一本道| 无码人妻丰满熟妇奶水区码| 97色在线| 香蕉婷婷| 99综合在线| 五月婷婷综合天天操| 《诡秘之主》在线观看| 99热主页日本| 99久久视频| 亚洲激情.com| 99久久超级| 亚洲精品操一操、噜一噜、摸一摸、爽 | 日韩五月婷婷久久| 五月丁香六月婷婷a v| 婷婷五月天亚洲| 伊人久久综合| 野战毛片三一3| 日本久久色| 天天天天天操| 午夜天堂一区人妻| 夜夜夜夜做天天天做无码视频| 婷婷色导航| 九九狠狠干| 天天澡天天狠天天天做| 婷婷综合日本| 五月丁香久人妻中文| 91丨九色丨老农村| 激情五月婷婷| 全高清无码视頻| 色婷婷88| 婷婷月五天在线在线看| 99视频只有精品| 99久久精| 亚洲日韩一页精品发布| 综合在线丁香五月| 日本在线播放97| 另类小说五月天激情| 亚洲乱码日产精品BD| 丁香六月婷婷综合麻豆| 91中文狠狠综合| 男女久久婷婷五月天| 亚洲在线免费成人| 亚洲综合丁香五月天| 婷婷五月天丁香久久| 这里只有精彩视频| 人人操AV| 综合婷婷| 婷婷五月丁香网| 婷婷丁香黄色| 欧美超级视频97| 欧美在线干| 开心五月激情网| 婷婷五月天激情综合婷婷五月天激情综合| 天天躁日日躁狠狠躁日日躁2022年5月9日 | 丁香五月天操B| 九九精品在线观看视频6| 免费操超碰| 色噜噜97视频在线观看| 亚洲婷婷丁香五月在线| 久久XX日本综合| 日韩aaaaa| www久| 青青草国产亚洲精品久久| 伦99热| 激情久久网| 国产精品大香蕉| 午夜九九电影| 99超碰人人| 婷婷六月丁香五月| 激情色视频| 色狠狠999综合| 激情综合五月天| 五月天电影网| 亚洲在线操| 熟女少妇内射日韩亚洲| 播五月丁香三月婷婷| 一级片sese片.COM| 爱狠射| 性爱综合网| 激情五月丁香在线观看直播| 丁香五月色五月| 五月激情综合网| 夜夜谢天天干| 综合五月天天天天天五月| 九九超碰人人| 99精品成人无码A片观看金桔| 婷婷五月另类网站| 狠狠色丁香综合| 九97免费视频| 激情五月天网| 人人人操| 色婷五月天激情| 欧美激情五月天婷婷| 秋霞av不能| 极品少妇XXXX精品少妇偷拍| 婷婷久久精品| 这里只有精彩视| 99热欧美在线观看| 手机旧版看人妻1025| 综合欧美五月婷婷| 五月天社区| 26UUU精品一区二区| 麻豆AV一区二区三区| 九九在线视频| 婷婷五月天综合色| 久久久妻人人人| 97九色视频| 久久男人网婷婷| 九九色色| 丁香五月成人网| 精品99在线观看| 丁香五月在线观看完整版| 性爱先锋AV| 久久人人九九| www.综合久久.com| 色99免费视频中文| 一区二区你懂的| 色欧美色色色| 无码91中文字幕| 激情av| 色久九| 免费播放片大片| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 夜夜骑操AV| 九九热自拍| 色玖玖玖| 97se视频在线| www.激情五月| 亚洲国产99| 色五狠狠| 九九久热| 天天日天天干天天操| 思思热久久爱| 婷婷五点亚洲| 天天色宗合| 五月婷婷开心综合| 色狠狠色噜噜AV天堂五区消防| 日韩乱玛久久| 丁香狠狠色婷婷久久无码视频| 色婷婷丁香五月天激情综合网| 五月婷婷天天色| 五月丁香WWW| 五月综合婷婷网| 欧美丁香六月激情视频| 五月婷婷六月基地| 精品久久人妻| www狠狠| 97碰在线视频| 人与禽A片啪啪| 婷婷五月另类网站| 二级黄色毛片| 亚洲婷婷五月天在线激情综合网| 亚洲视频丁香网va| 这里只有精品9| 狠狠色噜噜狠狠狠888| 亚洲视频操| a色色色色色| 亚洲天堂AV免费片| 国产色五月| 51国精产品自偷自偷综合| 在线另类视频| 亚洲操操操| 99热综合在线观看| 久9免费视频| 久久永久网址| 久久这里有精品视频| 成人电影在线免费试看| 久久五月综合| 涩婷婷视频快播人妻| 九九精品综合| 色婷婷综合五月| 九九精品网| 97操操操| 色啦啦视频| 蜜臀av粉嫩av懂色av| 另类色视频| 丁香五月激情啪啪| 九九成人| 免费啪啪啪网站| 狠狠色色| 99热99热在线| 五月天婷婷色| 久久大香蕉视频| 婷婷六月丁香综合| 天天插天天射| 操老逼综合网| www色色com| 激情六月婷| 思思re99视频在线观看| 色在线免费观看| 激情视频网址| 第五色色色婷婷| 五月天婷婷色| 国产精品久久..4399| 丁香五月婷婷欧美成人色图| www激情| 日本97久久久精品| 欧爱综合视频| 婷婷五月天丁香| 九九99九九精品视频| 夜夜骑日日操| 狠狠色婷婷7777久综合| 五月婷无码| 婷婷九月丁香| 香蕉97碰碰碰超视精品| 丁香五月综合亚洲| 高清一区二区三区日本久| 久久刺激网| 天天综合中文| 丁香婷婷成年| 五月色亭丁香| 国产精品日日躁夜夜躁| 大香人妻| 激情五月婷婷啪啪| www.91久久| 激情内射人妻1区2区3区| 99热在线精品观看| 欧美性爱五月天| 亚洲字幕AV一区二区三区四区| 婷婷色婷婷亚洲成人| 精品人妻久久久久| 狠狠色综合图片| 99re思思热在线视频| 日韩狠狠色| 婷婷五月欧美| 韩国天天婷婷| 牛牛热这里只有jingpin| 婷婷五月天成人娱乐| 97超碰人人操| 五月婷婷黄色| 丁香五月激情性色郤| 超碰91在线| 五月丿香啪啪| 在线1青婷| 色婷小说| 中文国产五月天| 成人中文网| 99热精品10| 九九香蕉网| 五月丁香啪啪网| 男女99免费视频| 91精品91久久久中77777久久玖玖九九| 99热.com| 欧美日本99| 婷婷五月六| 婷婷五月天丁香久久| 熟女激情五月天 | 久久这里有精品| 一级黄色片看看| 久久精品亚洲一级牲爱综合| 3www激情| 色婷婷91激情小说| 色婷婷视频| 五月色亭丁香| 狼人久草| 大鸡巴伊人网| 五月丁香性| 激情婷婷网| 天天干天天拍| 激情五月色综合网| 婷婷色导航| 色九九综合| 色狠狠综合网| 日韩精品一区二区亚洲AV观看| 99精品97| 中文字幕免费高清电视剧| 日本强伦片中文字幕免费看| 人妻久久久| 色情丁香五月婷婷精品| 欧美天堂久久| 日本色婷婷| 色欲婷婷夜夜| 在线视频婷婷| 婷婷五月天黄色小说| 狠狠色网| AV电影在线播放| 加勒比色色| 五月桃花网综合| 久久婷婷五月综合| 99ri在线观看视频| 国产毛片精品一区二区色欲黄A片| 久久人人人人妻| 天天肏天天肏| 99视频内射三四| 欧美va国产va| 大香蕉色婷婷伊人在线| 色噜噜狠狠一区二区三区| 亚洲精品成人| 99免费超碰在线| 丁香五月社区| 狠狠色丁香综合| 国产精品A片在线| 婷婷五月综合久久中文字幕| 天天日夜夜夜操操操操| 日韩AV一区二区三区| 婷香五月激情视频| 五月婷AV| 99热九九这里只有精品| 五月天色区| 99爱在线视频观看| 婷婷激情小说网| 日本91在线播放| 五月 激情视频| 婷婷大美在线| www.五月婷婷.com| 超碰免费人| 色五月综合激情| 亚洲色vA| 五月天色婷婷激情综合| 97干在线看| 人妻丰满精品一区二区A片| 天堂网啪啪| 五月婷庭丁香在线| 人妻激情综合| 日本婷婷色| 大香蕉九九| 中文av网| www.亭亭五月天| 成人色图情色成人网 www.5b5b5bcom 五月天| 色色色网站| 婷婷午夜精品久久久| 激情综合网 激情五月天| 久久色情| 人妻中文字幕精品| 香蕉久日夜| 99在线精品免费视频| 天天爱综合网| 激情五月天网页| 免费的日逼视频| Www.久久| 亚洲av电影网站| 日韩无码专区| 亚洲久久激情| 久久久18| www.色婷婷| 久久开心五月天激情| 99视频地址| 97福利视频| 五月丁香成人| 操逼国产91| 五月丁香888| 1024欧美看片| 激情涩播| 在线理论片| 欧美三级A做爰在线观看| 色五月综合激情| 99人妻碰碰碰久久久久禁片| 91色噜噜狠狠狠狠色综合| 丁香五月激情无码视频| 五月丁六月婷| 五月丁香激情综合欧美| 色婷婷丁香五月在线| 中文字幕成人| 丁香婷婷五月激情综合| 综合在线网| 亚洲小视频免费播放| 996热| 婷婷五月综激情| 伊人久久婷| 成人电影在线免费试看| 1024国产| 美女天天艹人人爽| 久久婷婷五月国产色综合激情| 无码地址| 五月婷婷色播视频| 少妇激情五月婷婷| 综合激情网| 午夜国产精品AV在线播放| 99久久久| 丰满熟女人妻一区二区三| 色播五月天激情| 五月丁香激情综合网| 丁香婷五月天开心六月| 色婷婷亚洲婷婷| 91超级碰| 欧美色色色| 伊人在线视频| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 婷婷丁香激情| 九九人妻福利| 天天撸夜夜爽| 国产午夜一区二区三区| 五月婷婷在线视频观看| 亚洲午夜AV| 久久婷婷视频| 久久五月婷天天干| 4399欧美另类视频| 激情丁香六月| 婷婷五六日| 热99只有里视频| 九九这里是免费的视频5| 99ri在线视频| 国产精品日本一区二区在线播放| 久久丁香网| 五月天停停日日| 精品九九在线观看视频| 欧美va国产va| 久久精品性爱| 99热这里只有精| 无码少妇高潮喷水A片免费| 亚洲成人精品三区| 成人综合AV| 日本ww亚洲| 亚洲狠狠操| 五月丁香免费视频| 久久99热网| 99日视频在线| 热久久77777| 丁香五月欧美激情| 五月天婷婷丁香| 99久久久精品| 婷婷精品视频| 色综色五月天婷婷| 久热AA| 不卡在线视频| 成人在线网址| 丁香五月激情澎湃一区| 色九月婷婷综合| 免费观看的av| 婷婷激情六月综合| 婷婷色五天| www.zbzhongsen.com| 综合www色| a色色片| 丁香六月婷婷色播| 97人碰人操| 亚洲另类婷婷综合| 丁香五月婷婷色偷偷| 天天色宗合| 亚洲成人av在线观看| 亚洲中文无码成人| 婷婷狠狠97| www.婷婷久久五月天| 色婷婷aV四虎| 26uuu亚洲欧美另类| 久久99网站| 99精品久久久久久久久| 色婷婷丁香五月天在线视频| 停婷丁五月在线| 婷婷情色开心五月天99| 激情欧美婷婷| 激情婷婷五月| 97操资源婷婷| 色婷婷五月天天天天天天天天天| 亚洲人妻Av| 色99超碰| 开心五月婷婷在线| 国外亚洲成AV人片在线观看| 九九激情综合| 色婷婷丁香五月| 久色大香蕉| 五月丁香婷婷国产精品综合| 日日撸夜夜操| av大香蕉| 四虎成人精品永久免费AV九九| 色噜噜五月丁香婷婷| 热99AV网站| 综合aV在线| 婷婷五月天激情综合| 婷婷激情五月综合| 久久网日本| 影音先锋一区| 97人人看一| 五月丁香婷婷五月| 丁香亭亭激情四射| WWW.开心五月天.COM| 青草视频在线观看视频 | 亚洲激情网| 天天肏视频| 伦乱天堂| 日韩成人无码人妻| 久久婷婷久久| 日本熟妇精品99| 国产无套精品一区二区| 万月丁香狠狠爱| 亚洲激情五月丁香久久久久| WWW.国产| 人妻久久久久久久久妻久久久久| 丰满少妇乱A片无码| 婷婷五月综合婷婷| 亚洲精品99| 国产操B视频| 人人97碰| 婷婷她六月天| 天天操天天插| 亚洲色情一区二区三区四区| 成人亚洲精品久久久久| 天天日夜夜夜操操操操| 狠狠爱成人综合网| 丁香五月天婷婷中文| 久热在线中文字幕色999舞 | 婷婷六月综合基地| 伊人婷婷大香蕉| 久久九九热视频| 99久久精彩视频。| 国产片XXXXA片国语对白| 亚洲黄色精品| 激情四射五月天| 日韩成人精品一区久久久久| 中字幕视频在线永久在线观看免费| 婷婷五月丁香成人| 五月丁香婷久久| 亚洲精品大片| 超碰在线人人| 中国女人做爰A片| 操逼在线视频| 97超碰欧美中文字幕| 综合性视频99| 99碰碰中文| 粉嫩av懂色av蜜臀av熟妇| 综合网色| 9久热精品在线视频| 思思热精品在线| 黄网免费看| 91男女视频在线观看| 91婷婷五月天嫩女| 久久婷婷网| 国产做爰视频免费播放| 开心五月深爱婷婷| 99热这里只有精品首页| 丁香色综合| 综合99久久| 色欲香综合网| 2017人人操| 丁香六月激情| 五月婷婷激情综合视频| 特黄三级片| 99re6在线视频精品免费| 91婷婷五月天嫩女| 色五月天天在线观看资源站| 欧美天堂婷婷日韩| av久热| www国产亚洲色婷婷com| 亚洲综合成人网站| 久久丁香五月婷婷| 久久五月天婷婷| 成人日韩欧美| 9色小视频在线观看| 色中色综合| 亚洲精品五月| 丁香色婷婷| 久久九九99.www| 超碰人人操在线| 成人综合伍月天| 亚洲成人色五月天| 激情骚五月| 国精产品一区一区三区免费视频 | 色婷婷五月色| 五月天啪啪网| 国产成人99久久亚洲综合精品| 日本操逼九九九九58日本操逼| 深爱激情中文五月天av| 中文字幕91,综合| 这里有精品| 激情六月丁香| 99亚洲色| 色七色九九| 91精品久久久久久久| 色青青电影色五月| 大香蕉伊人久久| 另类专区在线观看| 丁香六月五月婷婷| 色综合色欲综合天天免费 | 色国产五月| 91热久久| 99内射视频| 国产真实乱对白精彩| 99精品热| 日韩av在线电影| 欧美激情凹凸丁香网| 五月婷婷天天色| 五月丁香A片| 免费黄色AV| 99色久| 婷婷伊人五月丁香天堂网| 无码日本精品XXXXXXXXX | 天天干夜夜想| 激情伊人| 五月丁香啪啪网| 色婷婷六月丁香综合欲精品| 六月婷婷激情小说网| 91碰| 丁香五月激情棕合| 久久婷网| 久热黄色| 丁香五月婷婷综合精品素人| 涩 五月 婷婷 狠狠| 九一牛视频探花| 国产无套精品一区二区| 国产精品久久久久久久久久久久 | 99热久久日本| 区啪精品| 色色婷婷色色| 99久久終合| 91女人18毛片水多国产| 激情九月丁香婷婷| 99九九这里有免费视频| 亚洲国产99| 久99热| 夜夜爽天天爽| 婷婷综合五月天| 啪啪一区| 被男人添B超爽视频| 亚洲精品又粗又大又爽A片| 99热精品在线| 五月天综合久久丁香91| 94干大香蕉| Caop在线| 欧美日韩国产一区| 丁香五月激情啪| 美女激情综合| 99视频色在线观看| 婷婷五月天改成什么了| 六月丁香激情综合网| 五月天免费色| 五月婷婷乱| 婷婷丁香色五月久久88| 思思热视频在线观看| 五月丁香啪啪综合| 深爱激清网| 六月婷婷久久| 九九视频在线观看| 无码免费人妻A片AAA毛片西瓜| http:色情日本com| 黄色成人AV在线| 99热在线精品播放| 欧美色婷婷| 日韩av干| 天天天干夜夜夜操| 九九青青草成人| 丁香五月激情婷婷| 五月天婷婷色播综合在线| 激情婷婷网| 亚洲第一成人无码A片| 久久精品国产色| 婷婷丁香五月综合激情小说| 婷婷五月天亚洲综合| 色婷婷久久| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 色婷婷大香蕉| 99色6爱9热| 可以免费看的av网站| 99热资源在线| 五月丁香| 超碰妻人人| 九月婷婷久久| 台湾佬天天日丁香婷婷五月天| 五月天另类视频| 久久精品这里只有精品免费首页| 琪琪色网在线| 九九色播五月丁香| 丁香婷五月天| 射久久丁香五月| 香蕉久久国产AV一区二区| 综合网色综合| 琪琪理论片| 久久久噜噜噜久久人妻| 日本丁香五月| 国产全是老熟女太爽了| 久婷久婷激情肉| 激情五月天之五月婷婷| 丁香桃色网| 无码少妇高潮喷水A片免费| av在线免费网站| 丁香婷婷综合精品六月初| 六月久久狠狠| 玖玖婷婷五月天| 丁香六月婷| 狠狠色丁婷婷日日,伊人激情综合网 | 高清国产AV| 久久婷婷五月综合激情国产| 91丨九色丨白浆| 精品热青草| 深夜男女福利刺激影院一区| 一级性爱视频| 国产精产国品一二三在观看| 久久综合伊人77777蜜臀| 色色影院aaaav| WWW久久久| 久久人五月| A久久| 丁香五月天视频| 影音先锋男人资源站一区二区| 米奇激情婷婷| 欧美久久网| 蜜臀99久久精品久久久久| 第四色婷婷色五月| 人人操AV| 婷婷五月18永久免费网站| 天天射夜夜骑| 国产真实乱了老女人视频 | pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 丁香五月老师| 欧美性爱五月天| 殴美日比视频| 婷婷五月18永久免费视频| 日本综合久久| 六月丁香婷| 国産精品| 香蕉久久五月| 五月婷伊人| 五月天色图| av中文在线| 99综合一区| 99在线视频观看| 亚洲一区先锋影音| 婷婷五月天激情网| 婷婷伊人綜合中文字幕| 日韩久久视频| 91丨九色丨熟女|新版| 激情五月天网站| 五月激情综合网| 月月AV| 色婷婷丁香五月| 免费的日逼视频| 六月婷婷五月丁香| 日本精品在线噜噜噜| 97人人射| 婷婷色婷婷亚洲成人| 久色视频| www,久久久| 综合五月婷婷| 五月婷婷开心深| 天天操夜夜操| Xx色综合| 极品少妇XXXX精品少妇偷拍| 色五月激情综合| 亚洲黄色操逼| 天天成人综合视频|