久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

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

Qt POST JSON 避坑指南:從QJsonObject到QNetworkReply完整封裝 簡(jiǎn)介面向Qt初學(xué)者與桌面應(yīng)用開發(fā)者的HTTP網(wǎng)絡(luò)通信示例演示如何借助QNetworkAccessManager發(fā)起POST請(qǐng)求將QJsonDocument、QJsonObject構(gòu)造的JSON數(shù)據(jù)轉(zhuǎn)為字符串再經(jīng)toUtf8()編碼后作為請(qǐng)求體發(fā)送至服務(wù)器并正確處理響應(yīng)。工程配有簡(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等模塊依賴。整體壓縮包大小僅3KB結(jié)構(gòu)緊湊、無(wú)冗余資源可直接用Qt Creator打開并編譯運(yùn)行適合作為輕量級(jí)參考工程。目前已有5380人學(xué)習(xí)。研讀源碼可掌握設(shè)置application/json請(qǐng)求頭、調(diào)用post()發(fā)送數(shù)據(jù)、通過(guò)信號(hào)槽接收服務(wù)端回包等關(guān)鍵寫法也可作為向既有桌面程序集成網(wǎng)絡(luò)功能的起步模板。1. Qt 里 POST JSON 的坑十有八九不在網(wǎng)絡(luò)庫(kù)做 Qt 開發(fā)用 Qthttp 發(fā) POST 請(qǐng)求、帶上 JSON body是再常見(jiàn)不過(guò)的需求登錄鑒權(quán)、狀態(tài)上報(bào)、調(diào)用開放的接口服務(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ù)端接口的開發(fā)者也適合剛看懂示例但一改就翻車的新手。2. POST JSON 最小鏈路從 QJsonObject 到 QNetworkReply 的完整流程2.1 QNetworkAccessManager 的生命周期與選型在 Qt 里發(fā) HTTP 請(qǐng)求核心門面是 QNetworkAccessManager連接管理、請(qǐng)求調(diào)度、代理設(shè)置、SSL session 緩存都由它統(tǒng)一管理。我一般建議一個(gè)程序生命周期里只創(chuàng)建它一次長(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 的線程模型需要說(shuō)一下它是可重入的也就是說(shuō)不同實(shí)例可以分配在不同線程使用但同一個(gè)實(shí)例不建議跨線程調(diào)用。實(shí)際項(xiàng)目里最常見(jiàn)的做法是把 manager 放在主線程所有 post 都在主線程發(fā)起如果必須在工作線程用就讓那個(gè)線程自己創(chuàng)建自己的 manager不要共享。聲明一個(gè)請(qǐng)求用 QNetworkRequest最基礎(chǔ)的配置是這樣QNetworkRequest request; request.setUrl(QUrl(https://api.example.com/v1/user/login)); request.setHeader(QNetworkRequest::ContentTypeHeader, application/json);URL 這塊有個(gè)很容易忽略的細(xì)節(jié)如果地址里帶了中文參數(shù)、空格或者特殊符號(hào)直接丟給 setUrl最終發(fā)送的字節(jié)可能是錯(cuò)的服務(wù)端收到之后要么 404要么參數(shù)解析不對(duì)。常見(jiàn)的做法是先對(duì)查詢參數(shù)做百分號(hào)編碼或者直接用 QUrlQuery 構(gòu)造查詢串后面 3.3 節(jié)會(huì)專門講。2.2 JSON 構(gòu)造與序列化別用手拼字符串很多人喜歡這樣拼 JSONQString({name:%1,age:%2}).arg(name).arg(age)。這種寫法在小字段場(chǎng)景下能用但一旦字段值里出現(xiàn)引號(hào)、反斜杠、換行你就要自己處理轉(zhuǎn)義而服務(wù)端 JSON 解析器是零容忍的只要有一處引號(hào)不對(duì)稱整個(gè)請(qǐng)求直接拒收。正確做法是先用 QJsonObject 組織數(shù)據(jù)再交給 QJsonDocument 序列化QJsonObject body; body.insert(username, demo); body.insert(age, 28); body.insert(active, true); QJsonDocument doc(body); QByteArray payload doc.toJson(QJsonDocument::Compact);toJson 有兩種常用模式Compact 和 Indented。Compact 是緊湊輸出不換行不加空格網(wǎng)絡(luò)傳輸一般用這個(gè)體積最小Indented 是格式化輸出帶換行和縮進(jìn)適合打印日志和寫配置文件。我見(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 的讀寫不阻塞調(diào)用線程響應(yīng)到了之后通過(guò)信號(hào)通知。標(biāo)準(zhǔn)寫法是把回調(diào)接在 QNetworkReply 的 finished 信號(hào)上connect(reply, QNetworkReply::finished, this, [reply]() { if (reply-error() ! QNetworkReply::NoError) { qWarning() HTTP error: reply-errorString(); reply-deleteLater(); return; } QByteArray respData reply-readAll(); qDebug() raw response: respData; QJsonParseError parseErr; QJsonDocument respDoc QJsonDocument::fromJson(respData, parseErr); if (parseErr.error ! QJsonParseError::NoError) { qWarning() JSON parse failed: parseErr.errorString(); } reply-deleteLater(); });readAll() 的調(diào)用時(shí)機(jī)必須在 finished 之后在那之前讀可能讀到空數(shù)據(jù)或半截請(qǐng)求體。另外一個(gè)容易踩的細(xì)節(jié)是同一個(gè) reply 上的數(shù)據(jù)只能讀一次readAll() 之后內(nèi)部緩沖區(qū)就空了連續(xù)調(diào)第二次拿到的是空字節(jié)。不管請(qǐng)求成功還是失敗reply 最終都要 deleteLater() 釋放否則每次請(qǐng)求泄漏一塊內(nèi)存惡劣場(chǎng)景下跑一天內(nèi)存占用漲幾百兆。connect 時(shí)把 this 作為上下文對(duì)象傳進(jìn)去是一個(gè)值得堅(jiān)持的習(xí)慣。這樣當(dāng) this 指向的對(duì)象先被銷毀時(shí)lambda 不會(huì)再被觸發(fā)避免在回調(diào)里訪問(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 解析分支部分框架要求寫成 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ù)組與類型陷阱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 可以互相嵌套寫法上先構(gòu)造內(nèi)層再組裝外層代碼會(huì)清晰很多QJsonObject userInfo; userInfo[uid] 10086; userInfo[nickname] dev; QJsonObject loginBody; loginBody[user] userInfo; loginBody[device] PC; QJsonArray events; QJsonObject ev1; ev1[type] click; ev1[page] /home; events.append(ev1); QJsonObject ev2; ev2[type] scroll; ev2[page] /list; events.append(ev2); loginBody[events] events;這段代碼最終生成的 JSON 結(jié)構(gòu)是{ user: {uid: 10086, nickname: dev}, device: PC, events: [ {type: click, page: /home}, {type: scroll, page: /list} ] }構(gòu)造時(shí)有幾個(gè)需要注意的行為。QJsonObject 的 operator[] 用于寫入時(shí)如果 key 不存在會(huì)自動(dòng)創(chuàng)建這對(duì)構(gòu)造是方便的但如果你想先判斷 key 是否存在再?zèng)Q定是否寫入要用 contains()。另外QJsonObject 內(nèi)部的組織順序在不同 Qt 版本之間并不一致官方也沒(méi)有承諾保持插入順序。如果你的業(yè)務(wù)依賴 JSON 字段順序來(lái)生成簽名比如某些支付接口要求把所有字段按字典序排序再拼串那就不要依賴 QJsonObject 的遍歷順序應(yīng)該拿到鍵名之后自己排序。3.2 防御性解析先判類型再取值服務(wù)端返回的 JSON 往往比請(qǐng)求要復(fù)雜得多。有的接口成功時(shí)返回 object失敗時(shí)返回 {code: 400, message: ...}還有的接口干脆返回?cái)?shù)組。解析端我強(qiáng)烈建議養(yǎng)成“類型先判斷、取值有兜底”的寫法QJsonParseError parseErr; QJsonDocument respDoc QJsonDocument::fromJson(respData, parseErr); if (parseErr.error ! QJsonParseError::NoError) { qWarning() parse error: parseErr.errorString(); return; } if (!respDoc.isObject()) { qWarning() response is not an object; return; } QJsonObject root respDoc.object(); if (root.contains(code) root[code].isDouble()) { int code root[code].toInt(); if (code ! 0) { qWarning() business error: root[message].toString(); return; } } if (root.contains(data) root[data].isObject()) { QJsonObject dataObj root[data].toObject(); QString token dataObj[token].toString(); } if (root.contains(list) root[list].isArray()) { QJsonArray list root[list].toArray(); for (const QJsonValue val : list) { if (!val.isObject()) continue; QJsonObject item val.toObject(); QString name item[name].toString(); } }這樣寫的好處是字段缺失和類型不符合都會(huì)被擋在門外不會(huì)因?yàn)橐粋€(gè)字段解析失敗導(dǎo)致整個(gè)響應(yīng)白拿。有一個(gè)容易誤判的地方value(code).toInt(-1) 這種寫法缺 key 時(shí)返回 -1但 key 存在且類型是 string 時(shí)toInt 可能返回 0 而不是 -1所以更穩(wěn)妥的判斷方式是先 contains 再取值。3.3 細(xì)節(jié)三件套緊湊格式、URL 編碼與小數(shù)精度第一件發(fā)送和打印用不同格式。發(fā)送時(shí)用 Compact 緊湊序列化日志里打印請(qǐng)求體時(shí)改用 Indented人眼更容易核對(duì)嵌套關(guān)系。同一個(gè) QJsonObject 可以隨時(shí)轉(zhuǎn)換兩種字節(jié)流不沖突。第二件URL 查詢參數(shù)編碼。很多接口要求在 URL 里帶簽名和時(shí)間戳如果簽名值里出現(xiàn) 、、 這類字符直接拼進(jìn) URL 會(huì)導(dǎo)致參數(shù)被拆分。正確做法是用 QUrlQuery 構(gòu)造QUrlQuery query; query.addQueryItem(app_id, demo); query.addQueryItem(sign, signStr); QUrl url(https://api.example.com/v1/order/create); url.setQuery(query);QUrlQuery 會(huì)自動(dòng)完成百分號(hào)編碼服務(wù)端解碼后拿到的值和本地計(jì)算一致。第三件小數(shù)精度。QJsonValue 對(duì)數(shù)字只區(qū)分 double 和整數(shù)如果你從 double 填進(jìn) QJsonObject接收端拿到的就是帶小數(shù)的值。涉及金額計(jì)算時(shí)浮點(diǎn)誤差會(huì)累積建議約定以“分”為單位的整數(shù)來(lái)傳避免兩個(gè)端對(duì)不上賬。4. 同步等待與超時(shí)控制既要結(jié)果同步也要死等可控4.1 QEventLoop 把異步請(qǐng)求改成本地等待Qt 的 HTTP 請(qǐng)求本質(zhì)是異步的但很多業(yè)務(wù)邏輯是線性的先登錄拿 token再帶 token 請(qǐng)求數(shù)據(jù)。拆成信號(hào)槽一層層回調(diào)也能寫但回調(diào)嵌套多了以后可讀性和排錯(cuò)成本都會(huì)上升。一個(gè)常見(jiàn)的做法是借用 QEventLoop 把“異步請(qǐng)求 等待完成”包裝成同步函數(shù)。這個(gè)寫法適合命令行工具、后臺(tái)任務(wù)線程這類場(chǎng)景。注意如果跑在 UI 線程進(jìn)入事件循環(huán)會(huì)阻塞界面刷新用戶看到的就是界面卡死所以 GUI 程序里不要在主線程做這種同步等待。QByteArray postJson(const QJsonObject body) { QNetworkAccessManager manager; QNetworkRequest request; request.setUrl(QUrl(https://api.example.com/v1/rpc)); request.setHeader(QNetworkRequest::ContentTypeHeader, application/json); QByteArray payload QJsonDocument(body).toJson(QJsonDocument::Compact); QNetworkReply *reply manager.post(request, payload); QEventLoop loop; QObject::connect(reply, QNetworkReply::finished, loop, QEventLoop::quit); QTimer timer; timer.setSingleShot(true); QObject::connect(timer, QTimer::timeout, reply, QNetworkReply::abort); timer.start(3000); loop.exec(); QByteArray result; if (reply-error() QNetworkReply::NoError) { result reply-readAll(); } reply-deleteLater(); return result; }這里的關(guān)鍵設(shè)計(jì)是超時(shí)觸發(fā)時(shí) abort 中斷請(qǐng)求隨后 reply 的 finished 信號(hào)依然會(huì)發(fā)出來(lái)把 loop 的 quit 兜住不會(huì)出現(xiàn)死等。如果只等 finished 而不管超時(shí)遇到服務(wù)端遲遲不響應(yīng)線程就真的掛死了。deleteLater 放在 loop.exec() 返回之后執(zhí)行是安全的因?yàn)榇藭r(shí)請(qǐng)求已經(jīng)結(jié)束或者被 abort。4.2 超時(shí)設(shè)置setTransferTimeout 與單請(qǐng)求兜底如果你用的是 Qt 5.15 及以上版本QNetworkAccessManager 自帶 transfer timeout按毫秒設(shè)置manager.setTransferTimeout(5000);這個(gè)超時(shí)對(duì)該 manager 后續(xù)所有請(qǐng)求生效。需要注意它的語(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ā)線程退出時(shí)可能帶出一堆“connection closed”之類的噪音。還有一個(gè)值得避免的寫法不要在一個(gè) QEventLoop 里再嵌套另一個(gè) QEventLoop 去等新的 HTTP 請(qǐng)求。我見(jiàn)過(guò)有人在 finished 回調(diào)里又起一個(gè)新的 loop 去等下一個(gè)管理器的請(qǐng)求理論上能跑但其中一個(gè)超時(shí)沒(méi)兜住整個(gè)線程就僵住不動(dòng)。連續(xù)多段請(qǐng)求的正確做法是把它們串成隊(duì)列或者像第 2 章那樣用異步回調(diào)鏈。5. 避坑與排查POST JSON 最常翻車的五個(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)里的中文變成“錕斤拷”之類的亂碼或者所有中文都變成 \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 證書驗(yàn)證失敗本地調(diào)試與正式環(huán)境要分開對(duì)待現(xiàn)象請(qǐng)求本地開發(fā)環(huán)境的 HTTPS 接口時(shí)報(bào) SSL handshake failed 或者 certificate signed by unknown authority。原因本地聯(lián)調(diào)的 HTTPS 服務(wù)大多使用自簽證書Qt 默認(rèn)的證書鏈校驗(yàn)不認(rèn)這個(gè)證書。解決開發(fā)環(huán)境可以臨時(shí)放行。比較穩(wěn)妥的做法是連接 reply 的 sslErrors 信號(hào)在回調(diào)里打印出錯(cuò)信息然后調(diào)用帶參數(shù)版本的 ignoreSslErrors只放行當(dāng)前這幾條錯(cuò)誤不要無(wú)腦調(diào)用無(wú)參版本把未來(lái)所有證書錯(cuò)誤全部忽略。這個(gè)妥協(xié)手段只適合本地調(diào)試測(cè)試和正式環(huán)境必須走正規(guī)證書鏈否則中間人改數(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 指針一定要在連接銷毀前保持有效。connect 時(shí)帶上上下文對(duì)象比如 connect(reply, QNetworkReply::finished, this, lambda)一旦 this 對(duì)象先銷毀回調(diào)自動(dòng)斷開能規(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)的線程里QNetworkAccessManager 的信號(hào)派發(fā)依賴事件循環(huán)循環(huán)不跑finished 永遠(yuǎn)不會(huì)觸發(fā)。解決第一步把 URL 打印出來(lái)確認(rèn) setUrl 前已經(jīng)做了百分號(hào)編碼第二步檢查當(dāng)前線程有沒(méi)有事件循環(huán)沒(méi)有就換到有循環(huá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è)界面類里。通常我會(huì)封裝一個(gè) HttpManager 類內(nèi)部持有唯一的 QNetworkAccessManager對(duì)外只暴露一個(gè) postJson 接口加上完成回調(diào)void HttpManager::postJson(const QUrl url, const QJsonObject body, std::functionvoid(QJsonObject, int) done) { QNetworkRequest req(url); req.setHeader(QNetworkRequest::ContentTypeHeader, application/json); req.setRawHeader(Accept, application/json); QByteArray payload QJsonDocument(body).toJson(QJsonDocument::Compact); QNetworkReply *reply m_manager.post(req, payload); connect(reply, QNetworkReply::finished, this, [reply, done]() { QJsonObject respObj; int status reply-attribute( QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (reply-error() QNetworkReply::NoError) { QJsonParseError err; QJsonDocument doc QJsonDocument::fromJson(reply-readAll(), err); if (err.error QJsonParseError::NoError doc.isObject()) { respObj doc.object(); } } done(respObj, status); reply-deleteLater(); }); }這樣外部調(diào)用只需要關(guān)心數(shù)據(jù)組裝和結(jié)果回調(diào)網(wǎng)絡(luò)細(xì)節(jié)全部收進(jìn)類里。6.2 日志、狀態(tài)碼與簡(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ú)開定時(shí)器省心GUI 程序優(yōu)先走異步回調(diào)腳本和后臺(tái)線程再考慮 QEventLoop 同步等待。我從做第一個(gè) Qt 網(wǎng)絡(luò)模塊的模擬項(xiàng)目開始每次接口對(duì)接都強(qiáng)制走一遍自檢鏈先打印請(qǐng)求報(bào)文再核對(duì) Content-Type然后確認(rèn) reply 生命周期最后看響應(yīng)原始字節(jié)。這套流程讓我少踩了無(wú)數(shù)坑現(xiàn)在新項(xiàng)目第一天就把 HttpClient 封裝好后面每個(gè)接口只改 JSON 結(jié)構(gòu)和回調(diào)邏輯翻車率低了很多。希望幫你把 POST JSON 這條路走順。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美一区二区三区入口| 免费精品AB| 在线亚洲 欧美 日本专区| 婷婷三区| 亚洲第一综合| 国产日逼视频| 国产精品久久久久久久久久久久| 智利AV在线网| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 精品少妇一区二区三区免费观看| 成人性爱视频在线看| 伊人超碰97| 97资源免费视频| 91操操| 国产亚洲精品农村妇女| 久久性爱精品一区| 国产白嫩漂亮KTV在线| 日韩少妇无码| 精品欧美乱码久| 久久久久久久综合,国产| 91N欧美| 日本一本道A级黄色毛片试看60分钟| 色激情综合网站| 香蕉精品二区二区| 亚洲天堂精品日韩电影| 搡老女人老熟女91| 久久久日本电影| 亚洲超碰综合网| 欧美人妻色| 日韩美女久久一区二区三区| 久久黄黄| 亚洲夜色在线| 国产精品久久久视频| 99色在线视频| 蜜臀少妇一区二区| 色99视频| 天天影视色香色欲| 久久久98网站免费视频| 九九热超碰97亚洲最新香蕉| 爱欲AV| 日本91白丝| 国产精品天美传媒| 中文字幕乱碼在线| 天天看高清麻豆| 97这里都是精品| 日韩精彩免费| 无码日韩人妻av一| 人人操人人操人人操人人操人人操人人人11.CM | 18精品一二区| 可乐操亚洲蜜911| 伊人四虎综合| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 熟女高潮合集-永久久久-成人AV | www.av不卡中文字幕| 极品少妇99| 91夜色chaopeng| 亚洲欧美性生活| 国产传媒一区日韩| AV男人天堂网| 亚洲精品丝袜| 极品尤物在线观看| 国产女上位好爽在线| 中文字幕av色| 婷婷香网站| 啊啊啊啊啊啊啊在线| 黑人精品欧美一区二区蜜桃| 中文乱码字字幕在线第5页| 欧美啪啪色吧在线| 男人a天堂手机在线版| 在线国产探花| 午夜性| 青青草狠狠撸| 精品一区二区三区国产| ?亚洲伊人伊成久久人综合网| 99热免费| 九九国产热| 99999亚洲另类| 91欧美大片| 国产精品乱码久久| 殴美性天天| 亚洲av噜噜噜噜噜噜| 亚洲啪AⅤ永久无码| 免费看日本操逼视频| 久久国产99精品72福利| 国产精品成人午夜福利| 神马久久69| 中文字幕人妻色偷偷久久皮| 高清在线不卡一区二区 视频| 377p欧洲日本亚洲大胆| 亚洲综合网电影91| 猛猛干| 天美精品原创av片国产| 伊人色综合网| 日韩一区二区高清在线观看的| 一区三区啪啪| 久久久久久中文| 26uuu最新| 成人片在线播放| 九九九国产精品| 亚洲.欧美.丝袜.中文.综合| 久久久久七视频| 日韩中文9| 日本爽爽爽爽爽爽免费视频| 日本天堂网| 久久久极品| 亚欧性爱ab| 欧洲精品网| 青娱乐福利99| 欧美夜夜骑视频| yiqicaoav| 亚洲精品久久久久久久蜜桃臀| 天天日天天舔东京热| 青青草大香蕉视频| 日韩操人| 久久久久久久久女黄| AA特级绝黄| AV天堂电影网| 少妇厨房愉情理伦片bd在线观看| 看看小穴| 91视频综合网| 欧美色图私拍91| 亚洲色婷婷久久91| 综合干干干av久久久综合网| 国产无码成人无码| 九九热免费国产视频婷婷伊人五月 | 人妻81p| 精品176精品2| 亚洲熟女中文字幕在线| AV中文字幕三四五| 欧美亚洲丝袜人妻制服99| 超碰人妻97| 蜜桃久久久久久| 天天上日日上日韩精品| 99天天超碰| 亚洲AV操| JuliaAnn丝袜熟女系列| 欧美三级免费伊人| 在线无码网站| 欧美韩日精品99综合| 99久热| 国产又猛又粗又爽又黄| 精品国产乱码久久久| 久综合网| 操逼逼一区视频| 久久欧洲| 亚州AV无码国产精品| 中文字幕免费在线观看| 国产丰满熟夫69mpp| 深夜国产一区二区三区在线看| 日韩av情韩国爱禁区av一区二区| 色色综合网站| www.yeyecao| 97干综合网| 色婷婷狠狠| 亚洲在线a| 成人日韩中文字幕| 久久久激情| 91色人妻| 欧差乱伦二三| 中文字幕熟女人妻丝袜丝| 超碰调教97| 久久riav中文精品| 亚洲欧洲激情卡通另类文学四射小说网站| 精产国品一区二三产品| AAA久久| 日本三级A片网站com| 九九九九亚洲| 久草男人天堂| 800zy一区二区| 中文字幕 国产 精品| 亚洲福利影院一区久久| 欧美性五月| 性生活无遮挡纯毛片在线看| 97超碰美国| 无码精品蜜桃一区二区三区ww| 78精品| 欧美亚洲国产日本在线,久久精品国产| 亚洲精品中文字幕一区在线视频 | 久草综合京东| 日亚韩精品视频二区三| 伊人专区一区二区三区| 亚洲欲色| 欧美 亚洲| 中文字幕AV片| 色九九九| 五月天丁香欧洲日韩| 曰韩av中文字幕专区| 岛国黄片网站| 一区AV| 欧美综合第一页| 综合天天。| 欧美国产一区二区三区麻豆传媒| 中文字幕视频在线观看一区二区| 婷婷亚洲天堂| 日韩午夜啪啪视频| 丁香六月激情| 熟妇人妻丰满久久久久久久无码| 中文幕97| 91殴美大片| 天天干天天操天天拍| 免费看一级a性色生活片久久无| 亚洲乱色熟女一区| 日韩欧美大片免费高清啪啪| 中国人高清www色视频免费| 爱丝福利| 中文字幕免费在线观看| 一二三四区电影| 亚洲天堂美臀在线| 97日韩| 亚洲人妻爽爽爽| 欧美 亚洲 第一页 | 成人久久久| 久久久无码精品人妻二区 | 精品无码久久久久久久久果冻糖心 | 亚洲精品欧洲色| 国产夫妻性生活视频| 色五月激情AV在线| 国产97视频| 国产精品久久久久久久久久久久久久| 超碰九7免费| 久久婷婷成人综合色怡春院| 东京热大香蕉| 曰韩操B| 婷婷午夜成人色中色| 浪人综合网| 92人人操人人| 五月天激情小说| 好湿好紧好爽 视频| av天天在线观看| 黑丝91视频| 欧美日日夜夜| 欧美 综合 亚洲| 肉丝中文无码高清| 蜜臀久久99精品久久久久久无删减 | 久久精品无码专区| 波多野结衣一级视频| 亚洲一曲日韩精品| 噜噜噜无码AV一级一级久久影院| 97综合国产精品高潮久久| 色麻豆AV| 91AV入口| 99久久综合网| 91伊人影视综合| 午夜操一视频一区| a男人的天堂久久一级A毛片| 欧美自拍偷拍免费观看| 天天色悠悠激情| 亚洲天堂日本| 超碰免费人妻在线| 在线观看综合精品亚洲| 91中文精品日韩欧美在线| 韩日自拍| 国产无码久久高清| 天天干少妇| 使劲用力艹少妇视频一区二区| 東南亚性呦成人伦理资源在线视频| 91天天看| 人妻丝袜无 码视频专区| 三上制服丝AV| w w w.久久精品| 欧美色视频在线| 熟妇熟女亚洲天堂网| 夜夜综合| 人人玩人人添人人澡免费| 中文字幕jul-617人妻熟女| 天天弄欧美| 99热精品在线观看| 黄色av片三级三级三级免费看| 婷婷亚洲中文字幕在线| 极品少妇久久久久| 国产成人精品日本视频| 中文字幕av片| 中文字幕一区二区韩| 精品久一区免费| 伊色久人大在线| 午夜精品探花| 亚洲人人夜夜澡人人爽| 乱论91| 99re只有精品| 国产精品久久久无码aV去| 欧美日不卡| 一本大道青青| 操逼网站地址| 中文字幕在线免费观看 | 国产高清精品一区二区三区毛片| 国产一级αv免费看片| 97色论| 女性91网站| 国产精品一二三免费网站| 偷拍亚洲情色| 亚洲色诱惑| 欧美色爱综合| 夜夜草网站| 蜜桃网熟妇| 亚洲精品日韩国产欧美| 蜜臀99久| 91亚洲青青草原精品1区| 九七超碰| 四季AV综合网址| 五月天我淫我色av| 国产1727欧美| 1769精品一区二区三区| 91 综合网| 大香樵伊人网| 欧美精品久久96人妻无码| 久久久久久久极品香蕉视频| 欧美欧美啪啪视频| 国产精品高潮久久AV| 在线有码中文字幕| 色情婷婷久久五月天| 在线精品福利免费播放| 国产丝袜啪啪| 久超超碰| 欧美性爱另类综合| 女人天堂av在线播放| 中文字幕高清精品一区| 丁香六月激情综合| 青娱乐999| 少妇三P| 天堂中文资源在线bt| 中文一区二区| 亚 欧 美 综合| 日韩av性爱在线播放| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 久久精品色欧美aⅴ一区二区| 日韩八十路老熟女| 丁香五月天啪啪| 午夜精品久久久| 欧美久久婷婷| 婷婷五月天激情网| 亚洲1区2区三区高清中文字幕| 久久久性少妇| 97 国产一区| 天欧美在线| 在线电影亚洲色图| 天天综合91在线| 亚洲高清无毛一区二区| 大屁股熟女一区二区三区| 国产成人网址| 园内精品自拍视频在线播放| 九热中文字幕| 91N综合网| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 诱惑人妻欧美一区在线播放| 亚洲无码一区二区三区三州| 人妻啪| 96麻豆精品一区二区三区| 自拍欧美| 日韩三级久久久| 99精品成人免费看| 免费a级毛片av无码久久精品中文字幕| 麻豆黄站| 成人精品水蜜桃久久久久久久| 91久久精品国产| 久久精视频美日韩在线视频| 欧美区亚洲区偷拍区 | 殴美大黄片| 日韩黄色片子| 色呦呦国产精品免费看| 日躁天天爽爽| 色老大| 亚洲色图第一页| 5252色欧美在线| 一区二区偷拍拍视频| 欧亚免费视频| 妺妺跟我一起洗澡没忍住| 亚洲 自拍偷拍 欧美| 熟女探花啪啪| 秋霞 色色| 夜色91| 欧在线一二区| 夜夜爽夜夜操| 91日韩国产欧美亚洲另类精盘州至城都| 国产偷人妻精品一区二区在线| 久草视频制服诱惑| 亚洲成人精品久久久| 97国产超湿| 水野优香在线观看| 九九九午夜| 嗯嗯啊啊啊好舒服| 亚洲视频,小说| 97久久精品国产| 日韩av熟女一区二区三区成人| 玖玖视频在线资源一区二区三区| 91一区二区| 色五月婷婷在线| 女人高潮大叫一级毛片| 婷婷五月激情综合| 9九九九九视频在线观看| 久热9| 成人婷婷丁香| 久久精品免费| 久久同城AV| 天操天操夜操夜月月年年操操| 色色青青久久| 欧美午夜熟妇黑人精品91| 东北女人性交| 成人五级久久| 亚洲啪啪性视频| 亚洲老熟妇xxx| 日韩熟女精品无码专区一区二区| 久久久久久久久久黄色网| 国产十八禁视频| 伊人网在线点播| 国产400孕妇孕交群| 亲子敌伦对白在线播放| 亚洲精品毛片在线观看| 中文字幕日本久久| 青青草国产亚洲精品久久 | 狠狠色狠狠色狠狠五月| 大香樵伊人网| 欧美在线大香蕉| 任你干在线视频| 東南亚性呦成人伦理资源在线视频| 麻豆久久一区二区三区| 中国少妇XXXX做受| 婷婷月色| 青青草无码视频| 91精品人妻一区二区三区蜜臀| 男人亚洲天堂| 国产一级黄色片在线观看| 五月激情综合网| 东京成人一区| 蜜臀久久99精品久久久久久酒店| 欧美精品23| 操逼日韩无码 | 亚洲一区操| 欧美亚洲日本激情在线| 有码人妻系列| 色婷婷日韩精品一区二区三区 | 亚洲视频一二区| 国语精品av| 久操com| 欧美 亚洲 制服 精品| 加勒比伊人综合| 久久专区| 婷婷久久大香蕉| 最新精品久久蜜桃 | 浓厚中出中文字幕在线| 丝袜美腿欧美| 亚洲黄色a级片| 求求你操操我| 日韩欧美麻豆 | 富女玩鸭子一级毛片| 九久9精品| 欧美激情 亚洲色图| 亚洲美女精品| 搡老熟女免费视频 | 婷婷五月在线视频| 91欧| 天天操女人| 午夜乱轮操逼视频免费看| 蜜桃网熟妇| 午夜精品久久久99| 亚洲 国产 精品一区| 一本色道人妻久久| 大香蕉欧美日韩| 人妻加勒比东京热| 天天色综亚洲91污| 97干97色| 亚洲人妻日日日| 欧美日韩人妻少妇 一区二区三区| 插入综合网| 精品v日韩欧美国产| 国产激情在线观看| 国产精品99久久久www| 无码国产Av| 亚洲97成人在线观看| 9久9久9久9久视频网站| 亚洲综合校园春色| 呦女网站| 国内毛片四区| 亚洲视频精选| 美女诱惑久久| 天天综合中文字幕 91| 精品国产99999| 九草九九九| 丁香7月婷婷| 91强在线播放| 97在线观看视频| 国产丝袜啪啪| 国产精品诱惑| 亚洲一区在线观看欧洲| 亚瑟国产精品久久无码| 日韩av在线免费网站| 啪啪啪大香蕉| 67914亚洲精品| 日韩av在线播放不卡| 国产成人拍国产亚洲精品| 国产午夜福利视频在线| 欧美 亚洲 制服 精品| 国模吧 一区二区三区| 国内偷自视频区视频综合| 国产操操日韩三级黄| 亚洲日韩国产欧美综合v| 九九激情网| 婷婷成人五月天| 日韩紧密久久| 超碰人人干天天射| 亚洲国产欧美另类自拍| 91狠狠综合久久| 日韩中文字幕熟妇人妻| 久久久久久人| jizzjizz欧美| 久久久久国产亚洲一区欧美色图日韩| 97中文字幕色| 91亚洲情色| 大地资源在线观看中文第二页| 97干在线视频| 亚拍在线| 日韩一性一交一A片俄罗斯| 日韩有码中文字幕女同性恋| 肥佬影院91| 中文字幕一区 二 区 三 四 五 区日 日 骚| 一级性爱视频免费观看 | A级国产欧美激情在线| 插穴性爱视频在线观看| 无码人妻丰满熟妇奶水区毛片| 青青草综合在线| 天天色,天天干,天天干| 青青草啪啪网| 综合 欧美 亚洲 日本| 亚洲欧美色综合| 九九无码| 久久综合日韩亚洲欧美| 午夜性生活av免费在线看| 大香蕉色十月| 欧美色图片| 国产91美女高潮| 欧美色就是色| 大香蕉综合久久| 成人无遮挡毛片免费看| 欧美97视频| 手机看片1024你懂的国产| 后入人妻无码| 亚洲天堂人妻一区二区| 一级性爱视频免费在线| 九九九九九九视频| 精品视频久久久久九九九九9999| 啊啊啊爽爽| av在线人气| 新版天堂中文资源8在线| 精彩久久中文| 青青草密桃在线播放| 日韩一级成人毛片免费观看 | 中文字幕人成乱码熟女香港| 国产精品久久久久久久免牛肉蒲团| 免费的黄片有限公司| 91精品人妻五十路| 91中文精品日韩欧美在线| 国模少妇一区二区三区| 在线视频 亚洲精品| 国产乱码久久久久久| 超碰成人国产| 在线 制服丝袜中出 人妻| 99热这里只有精品1| 91九九九逼| 激情视屏国产乱伦强奸| 国产一级舔足在线观看| 97日韩欧美亚洲| 天天看高清麻豆| 日日干日日操五月天伦理视频| 精品黑人一区二区| 天天色综亚洲91污| 91精品女厕偷拍视频| 少妇久久久久久| 97在线视频网站| 午夜美女诱惑电源网| 日韩中文9| 成人十八禁日韩欧美一二三| 校园春色中文字幕AV| 欧美老妇女内射网址| 天堂蜜桃无码视频一区二区| 亚洲天堂区| 999日韩中文精品观看视频。| 欧洲乱码一区二区| 91n免费处女| 天海翼久久| 国产又粗又长又大的视频| 久久久久久久久女黄| 人妻激情视频| 人妻一区二区三区四区视频| 日韩精品碰碰| 亚洲超碰AV| 超碰97精品在线| 麻豆AV短剧| 97久久超碰日韩精品| 日本精品五区| 在线观看岛国有码| 99丝袜福利在线播放| 桃色六月天| 亚av顶级裸体一区二区三区四区五区 | 久久超碰国产一区二区三区| 另类小色呦| 国产最新AV| 亚洲激情天堂网| 久久香蕉国产线看观看亚洲女人| 七月丁香婷婷| 久久人人爽人人爽人人片Ⅴ| 欧美色图亚洲色图成人在在线| 成 人 A V免费视频在线观看| 精品成人av一区二区三区在线| 久久久中文| 99色骚| 一级性爱视频免费在线| 婷婷99狠狠躁天天躁| 99色婷婷中文字幕乱色| 神马麻豆福利院| 在线观看AV片| 91亚州欧美| 欧美色偷偷| 欧苏综合色综合| 超碰97伊人| 18禁精品网站在线看| 一区二区精品更新提醒| 丝袜综合网| 脫衣舞一区二区三区| 91肏屄网| 欧美天天干| 亚州Av天美传媒| 大香蕉黄色一级片免费看| 久热久一区二区三区| 夜夜黄| 大香蕉免费乱伦视频| 久9综合在线| av一区二区三区不卡| 亚洲AV免费在线| 九九热三级片| av亚洲天堂资源网站| 性性久久| av一区二区三区四区| 国产AV天美| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 9精品久久久久| 91一区二区| 操一操摸一摸| 欧美韩国你懂得在线 | 91呆哥人妻| 天天亚洲| 操逼短片| AV丝袜少妇| 免费一级视频特黄色大片| 1769一区| 欧美同性恋 的搜索结果 - 91n| 黄色av一区二区在线| 亚洲成人贴图| 97人人爱人人乐| 九九国产| 一区二区首页| 超碰碰碰碰| 永久免费发布性爱网| 99热一区二区三区四区| 91国精产品| 日本A级视频| 人妻在线大香蕉| 国产伊人自拍| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 啊灬啊灬啊灬啊灬高潮奶出了免费视| 99热在线观看| 99热在线播放| www色色色com| 色色五月婷| 性爱乱伦一区| 欧美日韩性爱视屏免费看了| 国产精品干干干| 欧美1区二区三区公司| 人人搞人人插人人操| 精品超碰色| av草草在线电影| 美女干逼2| 综合久久99亚洲人妻中文在线| 欧美黄色图片| 精品中文日韩字幕视频| 嗯嗯啊啊好疼| 97超碰欧美手机在线| 97视频在线免费| 国产精品第一页国产大屁股视频免费区| 九一国产精品| 国产久久久久久| 99国产精品久久久在线播放| 一区二区三区男女操逼黄色小电影| 78综合网| 77777亚洲蜜臀精品久久综合蜜臀| 人妻激情偷乱视频一区二区三区 | 美女诱惑在线一区| 日韩少妇丰满亚洲| 无码操逼天堂| 亚洲天堂男人| 91干熟女| 色爱欲亚洲| 91视频综合在线| 尤物网站91| 成年人一级黄色毛片大全在线观看| 最新国产精品久久精品| 超碰久久网| 精品女同一区| A级在线视频| 欧美日韩国产中文精品字幕自在自线| 国产精品老师| 麻豆国产第一| 五月丁香黄色网| 色爱国产| 99热这里只有是精品10| 色婷婷六月丁香七月婷婷| 亚洲AO在线| 久久↗↗| 人人看人人摸人人色| 日韩不卡网操逼中文字幕日韩| 96久久久| 极品丝袜无码| 百度百度日本操逼| 中文伊人大香蕉视频| 人妻娇喘 激情视频| 后入式视频国产自| 91激情国产| 久久久999| 国产自偷自拍一区| 女人18精品一区二区三区| 天天日天天搞天天干| 国产精品秘 福利姬在线观看| 欧美精品三区| 国产www色在线观看| 中国黑人三级片网站上区| 97国产人人| 欧美情色男人的天堂| 天天视频黄| 日韩中文字幕熟妇人妻 | 国语av狠狠色丁香婷婷综合激情| 亚洲美乱| 不卡中文字幕aⅴ在线| 亚洲自拍另类丝袜综合| 国产精品呦一区二区三区| 免费97视频| 亚洲最大网站av| 欧美激情内射| 亚 欧 美 综合| 五码视频在线观看| 亚洲日韩狠狠撸视频| 2024人人操人人摸| 夜夜爽夜夜爽| 97久久久久久久久久| 猛交交| 中文字幕在线免费观看视频| 毛片一区二区| 欧美性视频二区三区| 国产精品老熟女一区二区| 午夜福利av电影在线| 老熟妇一区二区三区| 婷婷亚洲中文字幕在线| 熟女被操视频网址| 国产精品人妻一区二区| 蜜臀Av一区二区三区| 操B久久| 激情网五月天| 无码国产精品久久久久| 国模不卡| 在线观看亚洲专区| 国产av强奸美女| 肏逼视频日本| 在线播放欧洲免费av| 久久久内射良家| 97精品视频免费| 一区二区三区 丝袜 高跟 美腿| 狠狠操综合| 丰满少妇乱子伦精品无| 91在线视频观看国产| 午夜福利精品| 在线观看av区| 日本日皮视频逼| 一区二区三区四区免费视频| 免费公开人人操| 色yeye成人免费视频| 亚洲国产一区二区入口| {男男暴菊gay无套网站| 激情抓乳插进去啪啪啪日韩 | 香蕉在线一区二区三区| 亚洲欧美激情另类色图| 五月丁香六月婷| 一区二区三区国产精产| 亚洲自拍欧美国产首页网曝| 97视频在线免费播放| aV中文麻| 黄色成人网久久久久久| 天天色天天干天天射| 女人午夜视频777| 婷婷伊人网| 清纯唯美激情四射| 97操综合| 最新日本中文字幕| 最新啪啪视频| 91久久国产综合久久| 亚洲色图欧美另类在线| 久久精品国产97欧美精品亚洲 | 欧美日韩黄片精品在线 | 午夜精品视频777| 二区熟妇韩日| 久久久久女教师免费一区 | 爽爽歪在线视频| 欧美在线中M| 国产精品盗摄 偷窥盗摄| 国产精品成人在线| 亚洲自拍一区夜夜操| 少妇熟女一区二区三区| 黄色av一区二区在线| 国产 大胆 对白| 91在线欧美| 亚洲天堂电影精品一区| 精品十八在线观看| 在线观看精品国产免费| 97欧美日韩中文| 自拍偷拍国产欧美日韩韩| 激情综合97| 欧美男人的天堂| 色官网色综合| 动漫av中文| 黄色片,com| 99热国产精品| 超碰成人国产| 91色婷婷综合久久中文字幕二区| 高清无码国产亚洲| 欧美日综合| 熟妇亚洲一区二区三区| 日韩欧美亚洲自拍偷拍| 亚洲AV乱码专区国产噜噜亚洲| 亚欧无码线免费观看视频| 美日韩一卡二卡三卡免费人妻精品| 欧美中文综合| 国产精品久久发布| 色哟哟AⅤ| 少妇蹲下买菜露大唇0| 天天做天天爱天天高潮| 激情婷婷综合久久| 91精品成人| 乱色视频中文字幕| 亲子敌伦对白在线播放| 99热8| 色性荡荡荡荡视频| 日本人妻丰满熟妇久久久久久| 自拍盗摄一区| 丁香五月性| 成人免费看吃奶视频网站| 久久久久深夜无码| 久悠悠av| 五月婷婷丁香| 岛国激情视频在线观看| 超碰91在线| 久久精品无码不卡| 99re不伦| 99这里只有精品| 欧美人妻精品一区二区| 放黄片放3级黄片没穿衣服| 加勒比色99999| 亚洲精品欧洲精品| 精品人妻伦一二三区久久| 偷拍三区| 日韩性爱啪啪视频| 天天网综合| 1204人成网站色www| 久久久久9| 欧美综合色站| 宗合情欲网| 一区久久久二区| 97欧美精品综合| 性色av一区二区| 操美女人妻| 91天美传媒精品| 久99久视频精选| 久久久精久久久| 蜜臀99999| 国产亚洲色婷婷99精品91| 台湾肥佬网一区二区三区| 久久久久久国产精品| 99色综合| 六月丁操逼| 亚洲免费97免费| 久湿久久 | 狠狠色综合网| 91美女丝袜诱惑视频| 91人人爽人人爽| 欧美色图片91| 国产热av| 国语av狠狠色丁香婷婷综合激情| WWW.操逼.COM| 91|九色|国产熟女| 婷婷久久综合| 久草草一二三四区久久| 亚洲系列欧美| 1769一区| 精品久久久久久亚洲| 国产91精品久久久久久久网曝门| 好舒服视频| 好涩综合| 人妻乱仑一区二区三区| 91操人| 日韩一级二级三级免费看完整版国语版 | 无码人妻精品一区二区三区九九 | 性爱视频免费网址| 天美av在线观看| 国产丸一视频| 国产一区在线观看无码AV| 999日韩中文精品观看视频。| 日本黄色XXX| 亚洲av综合色区图片亚洲| 黄色AV影视| 嫩草 我啊~嗯~在线| 少妇久久久久久| 天天干美少妇一区| 亚洲综人网| 91在线精品| 人妻无码视频一区二区三区久久| 欧美黄片免费在线观看视频| 大香蕉十区| 情趣丝袜无码操逼视频| 婷婷月色| 啊啊啊啊啊啊啊啊视频| 99日韩| 黄色交缠性感爆操91国产精品免费一区二区三区| 亚洲无码太久| 麻豆精品三区视频| 啊v视频在线观看| 欧美写真视频一区| 4141514逼喷水三级片| 综合久久97| 天天天天天天天天综合| 人妻9117c| 歐美性天天| av绯色| 国产日韩中文字幕欧美| 五月天激情小说网| 亚洲视频中文一区| 欧美韩日精品资源| 亚洲激情网| 秋霞一级鲁丝片A片| 欧美日韩亚洲五月天婷婷| 女人爽到高潮潮喷18禁网站| 欧美亚洲91| 中文熟女五十乱码在线| 亚洲AV免费在线| 日日夜夜精品| 大香蕉中文201| 亚洲自拍欧美色综合| 深夜激情无码| 日韩欧美福利视频看看| 97网址97| 国产精品久久9| 欧美极品少妇交| 丝袜美腿制服人妻二区中文字幕| 99999亚洲| 超碰精品人妻狠狠干| 亚洲伊人久久精品狠狠在线| 婷婷亚洲色| 国产精品午夜高潮呻吟久久av| 91精品国产91久久福利| 亚洲一区二区三区婷婷| 日韩色图 一区二区| 欧美亚洲se91| 欧美曰韩国产精品| 欧美性,色九九| 中文伊人大香蕉视频| 国产又黄又猛又粗又爽的网站| 一区二区三区激情在线观看| 欧美人妻精品一区二区| 国产性爱在线视频一区二区| 亚洲精品一二牛牛| 中文字幕第9页萱萱影音先锋| 中出欧美| 人人摸.人人色| 欧美亚洲在线| 国产日本一区二区三区蜜臀在线观看| 加勒比aⅴ| 秋霞午夜成人福利片片| AAAA欧美日韩| 亚洲性爱电影| 欧美亚洲另类在线蜜桃| 97任你吞精| 欧美色五月| 熟女在线视频| 久久 久久国内精品亚洲| 日韩一级二级三级免费看完整版国语版 | 久久久婷婷婷| 成人在线日韩| 日han少妇无码| 欧洲精品久久| 日本韩高清无砖码22o| 小视频国产| 人妻少妇精品一区二区三区| 好吊色一区| 亚州男人天堂| 在线一道啪| 富二代亚洲精品99| 91影视亚洲| 久久综合九色综合欧洲98| 另类 日韩 熟女| 九九九九九九九九九九九免费国产| 97公开久久| 91亚州| 99天堂网| 97看操| 精品无码一区二区三区| 色墦五月丁香| 婷婷精品国产欧美精品亚洲人人爽| 久久性爱视频免费看| 国产精选三级在线观看| 欧美美女在线高潮999| 极品肉射| 亚洲五月丁香花狠狠干一区二区三区 | 亚洲小说视频| 乱伦熟女区| av橘色网站| 中文字幕91页| 国产熟女精品区| 99久久精品无码一区二区毛片免费| 欧美亚洲日韩人妻在线观看| 成人精品水蜜桃久久久久久久| 国产三级中文有码在线视频| 性色国产东北露脸精品视频| 日韩免费高清大片在线| 天堂日本亚洲欧美| 国产精品一二三区18| 欧美综合97www| 日韩成人性日韩成人性爱视频在线免费观看| 婷婷五月成人| 啊啊啊免费视频| 欧美中文字幕男人天堂久久精品 | 亚洲欧洲视频小说在线观看| 性爱综合一区二区| 91欧美性| 99色色网| 久久 国产 无码| 九九九九免费高| 97精品综合| 黄片www视频免费| 亚洲蜜臀视频精品久久| 综合激情婷婷| 蜜乳中文字幕a在线| 另类成人首页一区| 后入人妻一区| 人人操人人摸人| 久久六六| 9精品久久久久| 狠狠干精品一二三四五六2022| aⅴ日韩成人电影av在线免费看av大全| 精品熟妇视频一区二区| 精品国产污一区二区三区| 中国探花熟女| 亚欧性爱无码| 欧差乱伦二三| 欧美淫乱视频| 欲香欲色天天天综合和网| 色婷婷激情| 亚洲午夜福利视频| 高清无码 国产精品| 97综合久久| 日本媚薬中文字幕在线| 久热大香蕉网站| 一级黄碟在线看| 国产白嫩精品久久| 1区2区3区在线视频| 日韩精品99999| 丁香五月天啪啪| 日本久久网| 国产精品国产拍高清AV| 亚洲一区二区性爱电影| 国产狂喷潮在线精品| 亚洲情欲| 好色综合| 国产精品内射婷婷一级二| 中文字幕在线观| 日韩无码一区二区三区| 9Ⅰ老熟女| 永久电影三级在线观看| 91性高朝久久久久久久久| 黄片视频,下载| 人人操人人操草草| 亚洲操人| 五月天色图| 国产AB视频| 99re免费| 伊人久久综合精品欧美| 熟女人妻一区二区三区| 免费久久精品麻豆一区二区av| 五月花婷婷| 欧美白嫩女HD| 成年人免费观看网站| 91天天综合日韩欧美| 香蕉黄色一级视频| 色婷婷基地| surenchaopeng| 欧美日韩1234| 日韩AC| 精品人妻一区二区免费蜜桃| 色香综合天天影视综合 | 凹凸 69堂 在线播放| 天天视频黄| 屌逼麻豆| 亚洲国产中文字幕| 天天躁日日躁成人字幕aⅴ| 秋霞久久亚洲精品成人| 夜夜狼人妻| 黑人娇小av在线播放| 极品色www影院| 日韩熟女视频二区| 逼操网站| 夜草欧美| 国产不良强奸视频免费看| 国内精品久久久久影院亚洲| 中文字幕精品久久久久人妻红杏ⅰ| 啪啪自拍九九综合| 久久丁香五月天| 一本色道人妻久久| 亚洲无码一区二区三区三州| 香蕉免费一区二区三区不读 | 日韩欧美tv一区二区在线观看| 亚洲大色堂| 国产精品自拍xxxx| 三级网站超变态精品| 综合亚洲欧美精品日韩?v| 手机不卡视频不卡在线一二三区| 精品人妻15区| 天美传媒国产原创中文字幕亚洲欧美另类| 97 国产精品| 日韩精品一二三四| 乱伦熟女论坛| 粉嫩AV一区夜夜嗨| 久久99人妖视频国产| 72av视频| 久久久久中出| 日韩探花精品在线视频| 91国产丝袜白虎| 色性欧美| 无码精品人妻一区二区三区妖精| 亚洲密乳AV| 在线观看国产黄色| 78m啪啪啪| 久久久av爱| 日韩成人免费电影| 久久人妻| 色欧洲97| 国产久久一区二区三区野外在线| 狠狠婷婷亚洲中文综合久久| 黑人与人妻| 麻豆天美国美国产| 狠狠操综合| 亚洲成人av电影在线| 日本一道在线播放高清| 天天综合网合集91| 亚洲大色堂| 蜜色网色哟哟| 欧美一级色| 精品-91人妻子系列| 性在久久久久久| 狠狠操,使劲操| 网友自拍第一页| 成人小电影网站tex| 亚洲女人毛茸茸91| 97bbn| 久久免费精品96| 亚洲精品国产精品乱码不卡| 日韩在线视频1234| 日本一本一区二区三区四区五区欧美日韩中文字幕 |