欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
亚洲色综合| 久久这里只有精品07| 婷婷五月天狠狠| 久久久aaa| 激情婷婷五六月天| 拍真实国产伦偷精品| 久久资源网五月婷| 99精品无码| 欧美狠狠草| 在线播放中文字幕| 婷婷五月噜噜| 538任你爽视频不一样的| 天天摸天天做天天爱天天爽| 99热99极品观看| A在线观看| 99re热精品在线视频| 亚洲精品成人| 色噜噜狠狠插综合| 狠狠香蕉| 91丁香色| 九九热中文| 久久久久9999| 午夜伊人大香蕉| 青草激情在线| 99爽视频| 99精彩视频| 襙比视频| 日本久草福利| 久99热| 五月丁香色色综合| 91伦| 超碰色综合| 欧美操逼天堂| 久久激情五月| 五月天激情综合10p| 五月停性愛| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 丁香桃色综合网| 国产91资源在线| 亚洲天码视频www蛋播视频| 色色丁香五月天社区| 91凹凸在线| 天天操夜夜爽天天操| 国产偷人爽久久久久久老妇APP| 噜噜噜精品欧美成人在线观看| 激情骚五月| 五月婷婷色影院| 天天射影| 欧美啪啪网| 欧美丁香婷婷天天操| 日产精品久久久久久久蜜臀| 亚洲人妻Av| sS丁香五月婷婷| 成AV人片一区二区三区久久| 97se视频在线| 蜜臀嫩草| 精品一二三区视频立| 久9精品视频在线| 狼友视频在线观看18| 深爱激情四射| 色色五月婷婷| 婷婷综合影院| 99re资源在线视频导航| 天天日天天色| 狼人婷婷综合| 深爱激情丁香五月| 91美女艹逼网站| 久久性操| 噜噜网免费视频| 2015好吊操| 日本91在线播放| AV五月丁香| Www.婷婷五月| 精品国产人人爱人人| 婷婷久久图片| 久久AV无码精品人妻系列试探| 婷婷成人视频| 欧美日韩AAAA| 欧美性爱特黄一级aaaassss| 激情五月天噢美| 色婷婷亚洲综合天堂| 99热官网精品在线| 青青草tp| 97色欧美| 日本狠狠色| 日本三级大片| 97视频.干com| 丁香五月婷婷五月| 色色网91| 黄色aa观看aaguochan| 99精品国产在热久久| 五月情四婷婷| 欧洲精品爱爱| 色玖玖网| 色开心五月婷婷丁香HD| 一本久久婷婷| 蜜桃人妻无码AV天堂三区| 激情综合网,婷婷五月天| 99热热这里只精品996小说| 丁香五月婷婷基地| 玖玖资源在线视频| 久久ab| 婷婷五月天国产| 26uuu亚洲欧美| 婷婷91| 久久精品噜噜噜成人A∨色欲| 免费精品99| 美女天天爽| 婷婷九九| 欧美伊人9| 中文字幕日产A片在线看| 九九精品99| 久久五月婷天天干| 亚洲性图一区二区| 亚洲激情综合五月婷婷啪啪| 色婷婷五月天在线| 巴基斯坦粉嫩无码视频| 丁香婷婷久久综合在线| 五月天婷婷高清无码| 日本的α片xxxwww| 99这里只有免费的小视频在线观看| 五月丁香 啪啪| 91视频免费后入强操| 99热在线播放精品| 色色影院黄大片| 99ri精品在线观看| 激情婷| 丁香伊人五月色婷婷五十路| 婷婷 丁香 久久| 色色色综合网| 欧美视频五区| 2025天天日爽| 人妻激情在线| 国产成人99久久亚洲综合精品| 色五月大| 夜夜资源站| 香蕉操亚洲| 91婷婷五月天嫩女| 激情婷婷丁香五月天| 五月开心网| 久久丝袜婷婷| 成人AV在线电影| 婷婷色婷婷| 无码人妻丰满熟妇奶水区码| 五六月婷婷久久| 丁香六月综合| 成人版视频在线观看| 看片视频在线免费日产在线看| 天天久久狠狠色综合| 婷婷99狠狠| 9999三级片| 婷婷中文在线| 精品国产一区二区三区四区阿崩 | 99免费超碰在线| 色色色色欧美| 天天色五月婷婷91久久久久久久| 亚洲人妻电影| 欧美性二区| 天天噜天天爱| 美国色五月天婷婷资源站| 狠狠操综合| 亚洲婷婷91丁香| 色综合天天| 91狠狠色| 4399无码视频二区| 99热在线资源| 南京搡BBBB搡BBBB| 婷婷六月激情| 黄网在线播放| 狠狠综合久久综合| 五月激情丁香五月| 我想看国产大学生口爆吞精的视频| 欧美性猛交AAAA片黑人 | 国产成人综合亚洲| 91n网站cad入口在线观看| 大香蕉九九操| 99热久久这里只有精品| 天天色噜| 丁香五月激情综合| 天啪色| 另类综合激情| 亚洲国产精品综合色区| 91久久久久久久久18| 成人五月天丁香| 99精品久久| 丁香伍月婷电影全集| 日本黄色精品| 日本va欧美va精品发布视频| 婷婷 色 丁香 夜| 欧美激情VA永久在线播放| 久婷| 亚洲中文字幕在线电影| 亚洲色人妻| 91免费看片| 婷婷五月综合色中文字幕| 五月天激情网页| 97性视频| www.99.色| 999婷婷综合| 色 免费网站视频| 亭亭丁香久久五月| 亚洲日韩欧美综合VA| 超碰97干| 丁香伊人五月色婷婷五十路| 久久网站免费亚洲| 五月天社区| 无码色| 2016日日夜夜操| 色日本丁香婷婷| 丁香五月成人论坛| AV在线中文| 又大又粗九一在线| 99色在线观看免费| 九九精品热播| 996黄色片| 五月丁香综合激情在线观看| 老司机日日夜夜青草| 狠狠干在线| 日韩AV在线电影| 欧美日本综合网| 五月天色综合| 人人草碰| 久久色五月天综合网| 五月开心激情| 日韩另类在线观看| 五月天婷婷久久综合| 五月天婷婷网站888| 超碰cap| 丁香色六月| 天天摸天天做天天爱天天爽| 丁香五月激情久久麻豆| 五月婷婷久久激情 | 开心五月婷| 深爱激情五月网| 人人操人人爽成人AV| 丁香五月天激情综合网| 成人做爰A片免费看网站找不到了| 五月天另类图片区99| 26uuu欧美亚洲日韩| 婷婷色色网| 色婷婷av综合网| 玖玖资源部在线播放| 超碰人人超碰| 五月丁香六月激情综合| 99婷婷国产最新视频| 亚州精品成人片| 伊人狠狠狠综合| 99久久99九九99九九九| 五月天激情国产综合婷婷婷就去爱| 久久婷婷五月| 色婷婷性爱| 丁香九月婷婷色| 噼里啪啦在线观看免费完整版视频| 色婷婷色| 欧美色色色色色| 色亭亭影园| 涩综合在线 | 丁香五月宝贝激情网| 激情欧美五月丁香| 99re这里只有精品9| www.色五月.com| 99精品97| 色五月 五月婷婷| 风流少妇A片一区二区蜜桃| 丁香五月激情婷婷| 色综合天天| 五月丁香婷婷爱激情综合网| 五月丁香六月天| 任你爽视频| 综合久久综合| 99热99在线| 色色色色色色网站| 婷婷五月天日本国产| 日日噜噜夜夜狠狠久久丁香六月| 99热免费网站| 极品人妻VideOssS人妻| 日韩黄黄| 99精品自拍| 五月激情综合网| 成人日韩欧美| 99热精品在线播放观看| 亚洲国产精品VA在线看黑人| 99re这里有精品手机在线| 国产SUV精品一区二区883| 婷婷激情综合无月| 欧美成人AAA片一区国产精品| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 激情五月天婷婷在线网址发给我| 婷婷五月丁香超碰| 操人91| www.99视频| 99色热| 色婷婷久久综合久色| 九月色婷婷| 人妻久久久久久久久| 九日日夜夜69| 久久草中文日韩欧美| 亚洲av网址| 欧美色色色色色| 99色在线视频观看| 亚洲色婷婷| 丁香欧美| 偷偷与邻居做爰完整视频| AV在线免费播放| 色婷婷网| AV五月婷婷露脸| 久久999久久999久久999久久| 97欧美在线| 97色碰| 9久热精品在线视频| 国产精品婷婷午夜在线观看| 另类图片激情五月| 亚洲成av人影院| 色五月第四色| 久久五月婷婷电影| 97人人妻人人艹| 99精品在线观看视频| 色一区高清| 成人做爰A片免费看网站找不到了| 日韩婷婷五月天| 久9热插入| 婷婷九月激情| 人妻精品久久久久久| 99热线观看9| 丁香六月婷婷色XXXXX| 五月丁香av在线| 婷婷玖玖丁香| 最近中文字幕2019视频1| 亚洲五月情| 在线观看av网站| www.91婷婷| 91久久久久久| 99性爱视频| 婷婷六月开心网| 亚洲综合色成丁香五月色| 丁香五月开心五月激情| 99免费偷拍视频| 97av在线视频| 中文在线视频久1| 婷婷丁香97| 婷色天堂| 亚洲情欲| 色丁香五月| 婷婷丁香五月激情图片| 99操中文视频| 中文字幕久久婷九女同| 99热在线观看| 高清视频一区| 欧美成人色婷婷| 久久视频66| 亚洲久艹| 超碰在线日夜| 丁香五月激情啪啪| AV性爱网| 亚洲五月天婷婷综合| 在线观看亚洲视频影院| 五月婷婷 自拍| 色婷婷在线视频| 五月天成人综合| 五月 丁香 欧美| 91干视频| 六月婷婷网| www.色五月| 五月天·www·com| 草草操操| 91九色精品| 亚洲第一成人无码A片| 亚洲av成人在线| 洗浴中心操B视频| 六月婷婷无码| 殴美日比视频| 亚洲 视频 导航 一区| 射满了还射免费在线观看 -午夜版全集-新视觉影院 | 午夜丁香婷婷| 9久久久久久久久久久| 66精品成人免费网站在线观看| 亚洲网站在线鸭子av| 激情五月色婷婷| 丝袜熟女一区二区三区| 五月婷婷六月激情| 在线观看免费观看在线9久| 99久久激情视频| 久热99热| 91超碰在线播放| 91久久久久久久| αv中文字幕在线观| 日本三级日本三级99| 婷婷97碰碰| 婷婷网五月天| 五月天播播| 五月天激情视频五月天| 99色视频免费在线规看| 激情九九综合网| 色婷婷深爱五月| 九九爱这里只有精品| 色色丁香五月天| 色综合香蕉| 久久久五月天婷婷成人网| 婷婷婷狠狠| 欧美搡BBBBB摔BBBBB| AV性爱在线| 大香蕉AV在线| 亚洲色五月| 99色视频| 国产成人片| 五月丁香婷婷色色| 99这里只有精品|v| 日本无va视频| 99热成人精品| 五月激情综合激情五月| 久久精品永久免费| 日韩av干| 婷婷五月天综合小说网| 日韩色五月| 色婷婷久久综合久色| 激情五月天在线观看色婷婷| 激情涩涩网| 色五月琪琪| 9月色婷婷| 九九精品免费| 欧美成人精品A片免费一区99| 深爱五月激情| 婷婷五月综合视频免费播放| AV人人操| 狠狠狠色激情综合适合| 成人电影AV在线观看| 久久久久久久97| 久久女婷| 99热在线观看| 久9草在线观看视频| www.91AV.com| 久久精品9| 五月六月播婷婷| 狠狠大香婷婷爱| 婷婷五月天无码视频| 欧美噜噜久久久XXX| 狠狠色性| 5月婷婷6月六月丁香| 伊人玖玖婷婷| 思思热在线| 香蕉AV777XXX色综合一区| 嫩草AV久久伊人妇女超级A| 五月婷视频| www.AV在线| 激情99| 五月婷婷黄色| 五月天基地| 停婷丁五月在线| 超碰免费人人| 婷婷色婷婷| 91久女| 香蕉乱插| 亚洲va日| 直接看的AV| 4399在线日本A片| 久久精品99国产精品日本| 99色综合久久| 日本三级中国三级99| 亚洲综合激情五月天婷婷| 色五月五月天| 亚洲午夜视频| 婷婷狠狠干| 性爱五月丁香| 甈吧vv| 婷婷六月综合基地| 99在线精品免费视频| 婷婷五月丁香激情图片| 五月天激情综合网俺也去| 五月婷色丁香| 日本人妻A片成人免费看片| 无码日本精品XXXXXXXXX| Y11111111111少妇电影院| 日本3级片偷拍网站| 伊人婷婷激情| 激情五月婷| 久操热线| 丁香五月天狠狠操| 九九热只有这里精品| 婷婷精品性性性性性性性| 激情五月天色色网| 超碰成人在线免费观看| 色婷婷久久综合久色| 直接看的AV| 伊人久久大香蕉网| 婷婷五月花| 国产欧美性成人精品午夜 | 播四月婷婷六月丁香| 色婷婷基地| 五月丁香成人网| 亚洲国产精品SUV| 五月婷婷丁香| 久久五月婷综合网| 天天摸夜夜爽天天做| 激情 婷婷| 超碰在线50| 狠狠操综合| 五月婷婷二月丁香| 激情五月丁香婷婷| 97电影99热| 五月婷婷婷自由综合| 久久久人妻门| 韩国真做片在线观看| 久综合九| 五月婷婷中文| 久久ri精品| 精品视频这里只有精品| 激情图片久久| 国产4P视频精品五区| 午夜青草资源| 五月丁香亭亭| 国产特黄色精品一区二区三区精品无广告| 久久精品系列| www,99热| 波多婷婷久久| 色五月婷婷激情五月| 丁香五月六月| 99久久婷婷| 超碰在线综合| 久久一级片| 99热20| 开心激情网在线| 六月婷欧美| 狠狠xx| 五月婷婷啪| 五月天狠狠色| 先锋资源91| 中文成人在线| 天天草天天摸| 四射综合网| 99热这里只有精品官网| 亚洲五月六月婷婷| 天天情色五月天| 色色婷婷五月| 99精品视频在线6| 五月婷婷av| 在线中文字幕视频| 五月丁香六月婷婷久久| 91九色网| 婷婷操逼| 亚洲激情网| 久久婷婷热| 日本一毛片| 日韩狠狠色| 五月婷婷丁香五月婷婷| 无码视频国内精品久久久| 大香蕉伊人久久| 久久激情五月| 狠狠色丁香久久久婷| 久热这里只有精品99re| 狠狠舔| 色五月婷婷丁香五月| 久婷五月| 婷婷久久色| 丁香五月在线人妻| 自拍偷窥99热| 丁香五月婷婷综合精品素人| 开心五月网| 精品一二三区久久AAA片| 丁香六月av| 无码人妻丰满熟妇奶水区码| 亚洲AAAA网| 欧美天堂婷婷日韩| 激情图片五月天| 天天插天天射天天干| 欧美日韩成人在线网| 五月色婷婷影院| 婷婷五月精品中文字幕| 久99久视频| 久热九九| 色情一区二区播放| 丁香久久激情俄| 激情五月久久| 伊人婷婷五月天| wwwss在线观看| 婷婷六月丁香1| 五月婷婷香蕉| 99色热视频在线| 婷婷午夜精品久久久| 色五月激情| 五月婷视频久久| 婷婷99狠狠| 色五月开心五月激情五月| 日日躁夜夜躁狠狠久久AV| 激情五月,深深爱五月| 久久国产高潮白浆免费观看99| 天天色粽合合合合合合合| 996er热| 色噜噜婷婷| 激情综合另类| 丁香六月婷| 久久婷婷色情7777网站| 99色综合| 开心色播色五月婷婷| 日韩一级淫乱片一区二区三区| 99热免| 婷婷性爱网| EEUSS鲁片一区二区三区| 丁香五月婷婷俺也要去| 极品色丁香| 成功精品影院| 五月天激情视频| 操97| 婷婷综合玖玖五月| 99热这里只有精彩| 99久久免费精品| 日韩免费99| 亚洲午夜一区二区| 亚洲婷婷开心五月| 91人碰| 色五月激情五月天| 欧美婷婷| 六月丁香VA| 日本色色网| 伊人香大香蕉视频| 丁香六月婷婷综合| 天天天天爽爽天干| 久久99久久99精品免观看粉嫩| 五月婷婷影院| 天天爱综合网| 久久香蕉婷婷五月天| 婷婷五月综合中文字幕| cc精品国产性传播| 香蕉婷婷| 熟美女麻豆| 任你操精品免费| 九九精品re免费视频| 99re在线观看| 丁香五月久久社区| 欧美人与性动交CCOO| 天天爱天天做天天| 综合性视频99| 国产日韩av片| 婷婷综合性爱网| 五月婷婷天| 久久98| 欧美精品狠狠色丁香婷婷| 欧美成人A片AAA片在线播放 | 99精品久久久久久久婷婷久久| 五月天婷婷丁香花| 欧美成人精品A片免费一区99| 五月婷婷在线视频| 婷婷色播色五月五色五月天色妇| 色色丁香色五月| 综合婷婷| 无码橾| 伊人久久五月天综合| 精品视频这里只有精品| WWW.99视频| 成人开心五月天| 色婷婷综合久色AV五色最新| 色婷婷色九月| 六月婷婷毛片| 六月 丁香 视频| 激情五月综合| 日日干日日s| www.婷婷五月天.com| jiuse91在线| 日韩一级一片内射视频4K| 五月天激情小说欧美激情| 色色综合色视频| www,99色| 男同91| 色99在线| 成人在线视频网| 亚洲成人中心| 青青福利网| 天天爽—爽| 婷婷激情伍月网| 综激情网| 久久艹99| 久久久久久久久99精品| 亚洲日韩久久婷婷伊人| 五月天桃色深爱网| www.99视频| 99热青青草| 五月色综合| 五月丁香六月婷婷网| 99国产小视频| 亚洲色域网| 大香网伊人久久综合| 丁香五月香蕉| 久久久97| 色五月激情视频在线综合| 激情五婷网| WWW.久久久久久久久久久久久| 噢美99| 激情综合五月丁香六月婷婷| 九九久久9 9在线观看| 激情5月婷婷| 日韩专区五月天婷婷丁香| 91丨九色丨国产打屁股| 色啪网| 婷婷导航| 日韩无码色色| 99∨VTV| 99精品在线| 国产真人做爰视频免费| 免费观看全黄做爰的视频| 全部老头和老太XXXXX| 国产全是老熟女太爽了| 国产日产亚系列精品版优势| 九九操操| 91青娱乐青青草| 丁香五月婷婷欧美成人色图| 色色色婷婷| 婷婷丁香综合色AV| 色婷婷精品视频在线播放| 在线sebiav精品视频| 欧美三级视频下载| 五月丁香六月激情综合| 久久99免费视屏| 99热精在线九九久久保| 狠狠干伊人| 久久99热在线观看| 东北婷婷五月天| 五月婷婷丁香狠狠撸久久| 天天久综合| 97在线刺激| 日韩色色视频| AV在线不卡播放| 久久se 综合网| 一级内射毛片| 无码 av电影| 五月综合激情网| 免费在线观看AV网站| 精品自拍99| 大香蕉久久草| 婷婷五月综合欧美在线播放| 丁香社区婷婷五月| 成人电影在线免费试看| 丁五月激情视频免费| 五月天亚洲色| 色噜噜狠狠色综合日日| 亚洲高清在线| 国产女18毛片多18精品| 97超碰在线免费观看| 激情婷婷五月久久| 五月天社区狠狠| 97碰碰人人| 激情五月天色色| 色婷婷成人做爰A片免费看网站| 久热99中文字幕| 9久久婷婷国产综合精品性色| 天天日日人| 人草人人| 日韩成人精品中文字幕| 色色9 9| 1024你懂的欧美曰韩| 国产激情视频在线观看| 视频这里只有精品16| 草综合14| www.狠狠操| www.AV在线| 蜜臀A∨在线水帘洞| 婷婷六月情| 九九热在线视频观看| 色狠狠色| www色综合| 天天影院色| 97偷拍在线视频| 9九热视频| 五月久久婷婷成人网| 人人爱操| 婷婷丁香五月色偷偷| 久久99热这里只有精品23| 人人舔天天| 五月天综合在线观看视频| 亚洲啪啪啪啪| 热久91| 91在线观看www| 欧美99热| 偷拍五月丁香| 91精品婷婷国产综合久久| 婷婷色色亚洲| 99久热这里只有精品视频删减版| 天天草比天天爽| 99亚洲精品视频| 日韩欧美成人网| 丁香六月天AV| 婷婷伊人久久| 九九婷婷热| 久久久久久xxxxx| 婷婷五月激情网| 日韩久久系列| peg 2区三区四区的| 思思热在线精品视频网站| AV在线免费播放| 五月丁香六月婷婷久久| 一区二区你懂的| 五月综合婷婷网| 青草激情综合| 9月色婷婷| 天天爽免费视频| 91精品激情9| 亚洲色色色色色色色色色| 日韩色情亚洲五月天婷婷| 99爱精品| 97九色| 天天天天操| 中文超碰视在线| 久久曰曰| 可以看的AV| 国精产品一区一区三区免费视频 | 婷婷丁香基地在线| 99热精品在线观看| 涩综合在线| 色墦五月丁香| caop在线视频| 91人操人人人操人| 涩丁香| 开心久久五月天| 97av在线视频| 99九九在线| 日本色色视频| 91人无码久久久久久| 五月丁香久久激情网| 狠狠人妻久久久久久综合丁香| 九九色图| 97艹| 婷婷激情六月| 99热99思午夜精品| 日本人妻丁香婷婷久久寝取熟女五月| 色色色com| 99在线视频免费| 99精品在线观看视频| 少妇大叫太大太粗太爽了A片| 婷婷五月播| 九九99一区| 九九99九九精品视频| 开心五月深爱激情| 国产精产国品一二三在观看| 五月婷婷就去色| 人妻丰满精品一区二区A片| 99亚洲综合| 色五月婷婷五月天| 天天肏天天插| 狠狠爱深色婷婷综合| 色五月综合激情| 在线观看亚洲AV| 欧美123区免| 99这里只有精品视频| 91视频久久久| 成人精品人妻| 色色五月婷婷| AAA久久| 深爱激情五月天色婷婷| 激情五月天电影| 激情五月天婷婷免费观看| 1024日韩| 婷婷亚洲五| 成人国产欧美大片一区| 丁香网五月网| 人操91在线| 久久人人妻| 国产日韩av片| 综合激情站| 亚洲婷婷丁香五月在线| 日日做A爰片久久毛片A片英语| 久久精品4| 色五月AV| 日日射天天射| 男女啪啪做爰高潮无遮挡| 丝袜大香蕉| 这里只有精品在线观看视频| 69堂午夜视频最新地址| 热91久| 五月天婷婷影院影院| 丁香深五月婷婷| 五月丁香亭亭| 天天操夜夜爽天天操| 国产熟妇的荡欲午夜视频| 日本欧美国产| 色九月国产| 婷婷五月天情色| 激情婷婷99| 久久网日本| 99热6这里只有精品6| 五月综合激情啪啪啪啪啪| 激情婷婷五月| 99亚洲视频| 天天干天天插| 狠爱婷色| 激情综合九月| 美女100%露全身无挡网站| 色婷婷成人做爰A片免费看网站| 狠狠操天天操天天操| 色都都狠狠色都都色综合色| 五月天婷婷导航| 最新日韩久热免费视频看看| 91成人电影| 九九熱最新視頻| 99A片| 亚洲综合色婷婷| 九九热99视频| 97亚洲视频在线| 九九热在线观看视频网站| 琪琪色网在线| 亚洲天堂热| 久99热| 亚洲第一成人AV| 99网| 精品人妻伦| 91九九九色在| 天天做天天爽| 美女网黄| 婷婷丁香久久| 九九亚洲视频| 亚洲综人色综网| 色婷婷亚洲综合天堂| 五月丁香婷婷深深爱| 激情婷婷综合| 98永久精品| 超碰激情网| 五月丁香激情综合欧美| 亚洲AV第二区国产精品| 精品影院| 亚洲欧州色情在线观看| www.婷婷| 久久色午夜在线导航| 91久久99久久91熟女精品| 婷婷五月天激情综合深爱| 中文资源在线a | 日本欧美国产| 婷婷五月天亚洲综合网| 婷婷色丁香五月| 亚洲字幕AV一区二区三区四区| 色综合伊人网| 插插五月天| 精品久色| 国产婷婷综合| 在线中文字幕免费视频| 99精品视频在线观看| nvrentiantang av| 婷婷激情综合无月| 成人一级片| 国产精产国品一二三在观看| 看国产探花操逼三级片| 丁香五月婷婷狠狠色| 国外亚洲成AV人片在线观看| 热久久91| 日日做夜夜爱| 九九这里只这里只有精品| 久久天堂网| 一区二区乱视频码| 亚洲经典三级| 婷婷五月天深爱| 国产亚洲在线| www一起操| 国产精产国品一二三在观看| 婷婷综合亚洲| 99热99色| 91日日日| 六月丁香婷婷综合影院| 久久大香蕉丁香| 天天干,夜夜爽| 99热这里只有精品国产精品| 神马欧美精| 亚洲成人免费在线| 五月婷婷六月情| 久久这里有精品99| 桃色激情婷婷伊人网| 色亚洲无码| 在线成人网址| 日噜噜色| 婷婷伊人综合| 国产在线网| 看片视频在线免费日产在线看| 伊人五月婷婷| 婷婷第六色| 婷婷99| 丁香色婷婷| 精品人人操| 玖玖爱综合网| 久久婷婷五月综合色奶水99啪| 99在线视频观看| 色999五月色| 另类激情综合| 久婷五月| 五月天天天天天天天天天天天婷婷婷| 拳交大逼| 99热这里只有精品3| 亚洲色色香蕉| 九九热只有精品| www.热99热| xx色综合| 夜夜夜夜操| 久久久婷婷婷| 激情婷婷五月| www...com黄在线观看| 日日爽夜夜爽| 少妇2做爰HD韩国电影| 色欲色香综合网| 五月激情六月丁香| 99成人| 激情六月天| 99综合免费视频| 亚洲无码99| 久久99热 这里有精品| 五月婷婷99热| 人妻久久久久| 97久久久免费福利网址| 五月丁香色综合| 色琪琪一综合久久激情五月视频| 九色91视频| 久99热| sS丁香五月婷婷| 五月花成人网| 亚洲激情图文小说| 婷婷五月婷婷五月| 五月丁香亚洲综合| 午夜成人综合| 国产成人99久久亚洲综合精品| 九九精品热| 丁香五月天视频| 丁香五月婷婷免费视频| 久久五月热| 亚洲a片免费观看| 久re热视频| 啊v视频在线观看| 狠狠夜夜五月丁香| 久久网思思| 九九免费视频| 五月丁香久久久久| 日日干日日| 五月天社区| 五月大香蕉| 婷婷九九色| 国产亚洲av片| 久久99精品久久久久久噜噜| 色婷婷狠狠| 天天操夜夜夜拍拍拍| 99在线观看免费精品视频| 米奇影视资源婷婷狠狠色激情欧美五月丁香 | 丁香五月a| 激情五月丁香在线观看直播| www.五月天社区| 日本一级特黄大片AAAAA级| 99九九精品| a级毛片一区二区免费视频| 六月色激情| 丁香六月婷婷缴情欧美| 婷婷五月色丁香在线看| 丁香六月亚洲| 欧美人妻一区二区| 99在线观看| 玖玖爱伊人网| yiqicaoav| 日本人人草草| 亚洲 精品 综合 精品| 啪啪六月婷婷| 五月婷婷六月丁香色| 51国精产品自偷自偷综合| 五月天啪啪啪| 全部老头和老太XXXXX| 97成人操| 三年高清大片免费观看国语| 色天使久久综合| 伊人大综合| 激情婷婷五月丁香啪啪啪| 欧美日韩国产一区| 日本va欧美va精品发布视频| 国产阿姨日皮艹逼内射视频| 婷婷亚洲五月丁香综合在线| 人人舔天天| 香蕉AV777XXX色综合一区| 超碰在线观看99| 人人爽网| 大香蕉在线观看9| 五月天激情播播网| 九九热在线视频,| 日日噜噜夜夜狠狠久久丁香六月| 综合激情伊人影视在线| 99热 免费| 99激情| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 久久婷五月天| 婷婷丁香精品视频在线观看| 1234操逼网| 丁香九月婷婷综合| www超碰com| 97资源欧美日韩大香蕉超碰一区| site:wpjngj.com| 五月丁香色婷婷综合| 色五月 五月婷婷| 无码人妻电影| 色9999综合久久| 五月丁香美女| 夜夜操狠狠操| 激情婷婷五月丁香啪啪啪| 欧美性交一区二区三区| 色色色色欧美| 久久草大香蕉| 久久五月丁香| 色色综合网www| 五月伊人综合| www狠狠| 人人爽天天爽| 在线中文亚洲| 爱草视频在线| 色色COm| 国产精品久久久久久久久久免费| 天色综合网| 婷婷激情5月| 精品久久99| 色婷婷影| 人人综合五月人人婷婷| 丁香五月天堂网| 99热每日| 丁香婷婷五月综合影院| 丁香五月婷婷乱| 狠狠香蕉| 久久天堂色| 亚洲人成网站999久久久综合| 色婷婷五月基地在线| 亚洲午夜AV| 97色天堂| 天天射综合网夜夜操| 五月激情综合网| 射久久丁香五月| 五月天婷婷婷| 五月天婷婷婷| ji'qing'luan'ren'lun| 五月丁香婷婷六月| 久久人操-久草婷婷-成人AV| 这里只有精品在线播放| 精品五月天| 操比激情五月| 丁香六月视频免费观看| 久久综合久色欧美综合狠狠| WWW.夜夜操.com| 日韩中文欧美| 大香蕉人妻| 色婷婷久久久| 91超级碰在线视频| 婷婷五月激情的图片| 香蕉综合网| 久久大香免费| 丁香婷婷深情五月亚洲| 激情电影五月婷婷| 人人人va亚洲视频在线| 欧美黄色一级录像| 婷婷五月天视| 久久五月丁香| 玖玖视频福利| 播五月开心婷婷欧美综合| 久久精品噜噜噜成人A∨色欲 | 99热自拍| 午夜成人网站在线观看| 色婷婷88| 婷婷性福五月天| 九九色院| www.9797国产| 玖玖婷婷五月| 久久久五月五丁香| 综合玖玖偷拍| 天天干一干| 色玖玖玖| 日本啪啪网| 婷婷五月激情网| 色五月婷婷丁香五月| 欧美色图45678| 99色干| 91色色色视频| 丁香婷婷成人网站| 超碰a女人的天堂| 久久久99久久| 4399亚洲视频| 婷婷激情社区| 欧美日韩成人| 婷婷五月无码| 涩涩五| 婷婷狠狠五月综合| 六月丁香网| 久久与婷婷| 国产麻豆视频| 99综合色| 五月婷婷|欧美| 婷婷五月天亚洲| 99热成人精品| 91碰碰视频在线观看| 色五月在线观看| 91九色视频在线观看| 婷婷五月天激情网| 五月婷婷AV| 97人人射| 丁香六月无码播放| 日本久久超碰| 夜夜躁爽日| 97在线综合| 强辱丰满人妻HD中文字幕| 婷婷丁香色五月久久88| 五月亭大香蕉| 婷婷五月天综合在线| www,婷婷五月天,com| 激情丁香久久| 五月激情偷拍| 激情图片婷婷| 久久久久久久久月丁| 岛国av电影网站| 9精品视频在线| 色爱综合网| 五月丁香六月婷婷综合网| 大香蕉 婷婷| 久色中文| 激情婷婷护士激情| 91avse| 伊人六月无码视频| 久久一级免费黄色片| 色婷婷狠狠爱| 日在线V视频在线播放| 男同色五月开心五月激情五月| 六月丁香色色| www.五月激情.com| W色综合| 亚洲AV网址| 99色在线观看| 婷婷五月丁香综合瑟瑟| 丁香六月婷婷综合缴| 丁香五月激情六月欧亚激情综合导航| 1024操逼| 久久久久久久久99精品| 操久久网| 我淫我色婷婷五月天激情四射| 日韩高清成人| 色色丁香| 九九爱精品网站| 五月婷婷婷婷婷| 色色五月天丁香| 成人丁香婷婷| 天天摸天天肏| 色五月丁香一区在线| 激情综合在线播放| 五月天婷婷激情小说电影| 久久久久久久久久人妻| 久久婷婷激情| 亚洲AV无码电影| 91久久久久久| 伊人五月网| 97人人爱人人操| 任你躁XXXXX麻豆精品| 色噜噜狠狠色综合网| 婷婷五月天99| 五月婷婷丁香综合| 中国女人做爰A片| 六月色国内综合| 成人精品在线观看| 日本人妻久久| 激情四射五月天| 国产VA亚洲VA96| 大香网伊人久久综合| 国产婷婷婷| 能看的AV网站| 激情99| 亚洲中文字幕在线观看| 丁香五月无码| 91viP在线看| 婷婷五月天丁香花| 日本在线视频播放91| 久久er免费视频| 国产在线网| 久久人妻精品| 欧美日比视频| 色婷婷激情五月天| 99热思思久| 色色五月天网站| 亚洲深喉AV|