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

ARTICLE DETAIL

資訊詳情

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

靜默打印落地指南:用本地中間件繞過瀏覽器打印預(yù)覽限制

靜默打印落地指南:用本地中間件繞過瀏覽器打印預(yù)覽限制 簡(jiǎn)介SilentPrint中間件為一款面向網(wǎng)頁靜默打印場(chǎng)景的JavaScript解決方案專為需要在后臺(tái)自動(dòng)完成打印任務(wù)的前端開發(fā)者與系統(tǒng)集成人員設(shè)計(jì)。它通過攔截和控制打印流程避免常規(guī)打印對(duì)話框?qū)τ脩舨僮鞯母蓴_適用于電子發(fā)票自動(dòng)打印、訂單小票輸出、自助服務(wù)終端等場(chǎng)景。資源包共44個(gè)文件內(nèi)部以ES6模塊、Vue單文件組件、Electron主進(jìn)程配置及Webpack打包腳本為主同時(shí)包含EJS模板、YAML配置、HTML示例與Markdown說明文檔整體體積僅154KB結(jié)構(gòu)緊湊且便于二次開發(fā)。已有5277人學(xué)習(xí)下載說明該方案在靜默打印需求中具備較高參考價(jià)值。內(nèi)容涵蓋完整的Electron-Vue工程框架、Web Worker后臺(tái)處理思路、HTML2Canvas渲染打印方案以及瀏覽器兼容性注意事項(xiàng)可幫助開發(fā)者快速理解靜默打印的技術(shù)實(shí)現(xiàn)并根據(jù)項(xiàng)目需要調(diào)整打印參數(shù)與降級(jí)策略。1. 靜默打印網(wǎng)頁預(yù)覽彈窗這道坎為什么非要靠一個(gè)本地中間件靜默打印這個(gè)詞第一次聽的人多半會(huì)問打印本來就是人主動(dòng)操作的動(dòng)作為什么還要“靜默”在掃碼槍掃過一張出庫單、收銀臺(tái)打購物小票、夜里定時(shí)批量出報(bào)表這些場(chǎng)景里流程要的是“單據(jù)自動(dòng)到打印機(jī)人走過去取走”而不是“彈個(gè)預(yù)覽窗讓用戶再點(diǎn)一次確定”。瀏覽器出于安全限制把打印鎖在了用戶手勢(shì)里網(wǎng)頁腳本繞不過預(yù)覽確認(rèn)這一步這就逼出了另一條路本地中間件。網(wǎng)頁把打印任務(wù)通過 HTTP 交給本機(jī)常駐服務(wù)服務(wù)端用系統(tǒng)權(quán)限直接送打印機(jī)。下面把架構(gòu)、接口、參數(shù)、避坑、進(jìn)階全拆開按一線落地的實(shí)際經(jīng)驗(yàn)講。2. 中間件怎么立住瀏覽器打印沙箱的邊界與本地打印網(wǎng)關(guān)的拆解2.1 瀏覽器為什么給不了靜默用戶手勢(shì)與打印沙箱的兩個(gè)硬限制從瀏覽器這條路徑講window.print()是有用戶手勢(shì)要求的。主流瀏覽器都要求調(diào)用print()時(shí)處于一次用戶交互的事務(wù)里比如點(diǎn)擊事件、快捷鍵回調(diào)如果用setTimeout延遲到用戶操作后幾秒再觸發(fā)瀏覽器照樣識(shí)別這不是直接手勢(shì)要么忽略調(diào)用要么強(qiáng)制彈出一個(gè)帶確認(rèn)按鈕的界面。這是第一個(gè)硬限制頁面腳本不能跳過“顯示預(yù)覽”的過程。第二個(gè)硬限制是權(quán)限邊界。網(wǎng)頁運(yùn)行在沙箱里沒有訪問本機(jī)打印機(jī)驅(qū)動(dòng)、操作打印隊(duì)列的接口。瀏覽器即使推出面向系統(tǒng)的打印能力設(shè)計(jì)上也依然不做“無預(yù)覽直接出紙”這件事而且落地狀態(tài)參差不齊。所以不要把靜默打印當(dāng)成一個(gè)前端技巧問題它本質(zhì)是一個(gè)權(quán)限問題誰有權(quán)限誰才能靜默。瀏覽器沒有一個(gè)跑在用戶機(jī)器上的本地進(jìn)程有。我在推進(jìn)這類需求時(shí)業(yè)務(wù)方最初的理解往往是“改改前端調(diào)一下打印插件就行”結(jié)果預(yù)覽窗一定彈出來每個(gè)操作員每天要多點(diǎn)幾十次“確定”高峰期重復(fù)出單的投訴接踵而至。最后切到中間件方案打印這步才從用戶視角里徹底消失。記住這個(gè)前提中間件不是為了繞過某個(gè)限制而寫的花活而是把打印能力從網(wǎng)頁沙箱里搬到一個(gè)有系統(tǒng)權(quán)限的宿主進(jìn)程里。2.2 三種中間件形態(tài)指令型、文件型、渲染型怎么取舍圍繞“網(wǎng)頁把活交給本地”落到實(shí)現(xiàn)上常見就三種形態(tài)。指令型中間件最薄瀏覽器只把打印機(jī)名稱和文件路徑轉(zhuǎn)速給本地接收端由接收端調(diào)用系統(tǒng)打印命令。它適合業(yè)務(wù)文件已經(jīng)固定落在某臺(tái)內(nèi)網(wǎng)機(jī)器目錄里的場(chǎng)景實(shí)現(xiàn)起來最快但靈活性差網(wǎng)頁側(cè)拿到的數(shù)據(jù)還要先落盤落給誰、臨時(shí)目錄歸誰管都是問題。文件型中間件是當(dāng)前最通用的形態(tài)網(wǎng)頁把 PDF 或圖片的 base64 內(nèi)容直接 POST 給中間件中間件接收后解出字節(jié)流、落到臨時(shí)文件再調(diào)用本機(jī)的打印命令??鐬g覽器表現(xiàn)一致服務(wù)端能對(duì)打印任務(wù)做重試、份數(shù)控制、日志審計(jì)我一般把主鏈路做成它。渲染型中間件更進(jìn)一步中間件內(nèi)部帶無頭瀏覽器內(nèi)核網(wǎng)頁只發(fā) HTML 模板和 JSON 數(shù)據(jù)后端拼裝頁面、轉(zhuǎn) PDF、再送去打印。適合套打、票據(jù)這類版式復(fù)雜的場(chǎng)景代價(jià)是中間件體積大、首次渲染慢排錯(cuò)鏈路長了一截。如果需求是給倉庫發(fā)貨單、門診清單這種固定模板用我建議走文件型前端負(fù)責(zé)出 PDF 字節(jié)流中間件負(fù)責(zé)打印職責(zé)分離問題也最好定位。以下實(shí)現(xiàn)和參數(shù)說明都基于文件型中間件指令型和渲染型可以在這個(gè)骨架上各自換“接收”這一段。2.3 最小可跑通的中間件用 Python 在 Windows 上拉起本地打印服務(wù)我常用 Python 來做這個(gè)本地服務(wù)原因是 Windows 上枚舉打印機(jī)、查詢狀態(tài)可以直接用系統(tǒng) API不需要額外安裝瀏覽器內(nèi)核。依賴只有兩個(gè)flask做 HTTP 服務(wù)pywin32調(diào)系統(tǒng)打印接口。# silent_print_server.py from flask import Flask, request, jsonify import os, base64, tempfile, subprocess, shutil import win32print app Flask(__name__) DEFAULT_PORT 4850 # 固定端口前端和中間件都得知道 app.route(/api/ping, methods[GET]) def ping(): # 健康檢查前端靠它判斷本機(jī)中間件是否在線 return jsonify({status: ok}) app.route(/api/printers, methods[GET]) def printers(): # 枚舉本機(jī)已安裝的打印機(jī)方便前端下拉選擇或核對(duì)名稱 names [p[2] for p in win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL)] return jsonify({printers: names}) app.route(/api/print, methods[POST]) def do_print(): body request.get_json(forceTrue) printer body.get(printer, ) file_b64 body.get(content, ) suffix body.get(suffix, .pdf) copies int(body.get(copies, 1)) if not printer or not file_b64: return jsonify({code: 400, msg: printer and content are required}), 400 raw base64.b64decode(file_b64) # 用臨時(shí)文件承接字節(jié)流確保每次打印任務(wù)互不干擾 fd, path tempfile.mkstemp(suffixsuffix) with os.fdopen(fd, wb) as fp: fp.write(raw) print_backend(printer, path, copies) os.unlink(path) return jsonify({code: 0, msg: print job accepted})這段代碼里/api/ping是前端輪詢的入口/api/printers方便部署時(shí)核對(duì)打印機(jī)名/api/print接收打印指令。臨時(shí)文件用mkstemp創(chuàng)建天然帶隨機(jī)文件名避免并發(fā)任務(wù)互相覆蓋。實(shí)際打印動(dòng)作我放在print_backend里它需要根據(jù)機(jī)器上可用的打印通道來選。最省事的做法是調(diào) Ghostscript 的mswinpr2設(shè)備命令模板大概長這樣def print_backend(printer, path, copies): gs_exe os.environ.get(GS_EXE, gswin64c) # %printer% 是 ghostscript 的轉(zhuǎn)義語法不是 windows 變量別改 output %printer% if False else f%printer%{printer} for _ in range(copies): subprocess.run([ gs_exe, -sDEVICEmswinpr2, -dNoCancel, -dPrinted, f-sOutputFile{output}, path ], checkTrue, timeout120)-dNoCancel會(huì)讓打印過程不彈“取消”對(duì)話框-dPrinted標(biāo)記為已打印文檔-sOutputFile%printer%打印機(jī)名是直接把輸出送向指定打印機(jī)的固定寫法。如果機(jī)器上沒有 Ghostscript另一種做法是在環(huán)境變量里配一個(gè)PRINT_COMMAND模板把{printer}和{file}占位符替換成真實(shí)值再交給subprocess執(zhí)行。啟動(dòng)命令就兩行先裝依賴再拉起服務(wù)。pip install flask pywin32 python silent_print_server.py服務(wù)起來后瀏覽器直接訪問http://127.0.0.1:4850/api/printers能看到 JSON 返回的打印機(jī)列表說明中間件已經(jīng)能用了。走到這一步第一版鏈路就算通了后面再談通信協(xié)議和參數(shù)細(xì)化。3. 對(duì)接網(wǎng)頁打印接口定義、前端調(diào)用與中間件響應(yīng)3.1 打印接口的數(shù)據(jù)結(jié)構(gòu)一條靜默打印指令到底傳什么接口傳什么字段直接決定中間件能做到多細(xì)。我經(jīng)歷過幾個(gè)項(xiàng)目最早只傳“打印機(jī)名文件內(nèi)容”用起來老要補(bǔ)參數(shù)后來固定成下面這套結(jié)構(gòu)基本覆蓋了 90% 的業(yè)務(wù)。字段類型必填說明printerstring是打印機(jī)名稱必須與系統(tǒng)里的打印機(jī)名完全一致contentstring是文件內(nèi)容的 base64 編碼suffixstring否文件后綴默認(rèn) .pdf傳 .png/.jpg 走圖片打印copiesint否打印份數(shù)默認(rèn) 1最大限制 99profilestring否業(yè)務(wù)打印配置名命中后自動(dòng)套用紙張、方向、打印機(jī)callbackUrlstring否打印結(jié)果回傳地址適合業(yè)務(wù)系統(tǒng)接狀態(tài)content為什么用 base64 而不是直接傳二進(jìn)制因?yàn)?Web 端 fetch 傳 JSON 最省事文件以 base64 嵌在 JSON 里中間件拿到后先解碼再落盤整個(gè)鏈路不需要額外處理 multipart 邊界。代價(jià)是體積膨脹三分之一左右對(duì)內(nèi)網(wǎng)場(chǎng)景完全可接受。profile是我后來加進(jìn)去的前端不需要知道底層打印機(jī)叫什么名字、紙張多大只傳“sales_receipt”這種業(yè)務(wù)詞由中間件映射到具體配置。好處是打印機(jī)換名時(shí)只改中間件配置不動(dòng)網(wǎng)頁代碼。這套做法對(duì)多個(gè)子系統(tǒng)對(duì)接一個(gè)打印網(wǎng)關(guān)特別有用。3.2 前端調(diào)用與異常處理ping、fetch 和任務(wù)失敗判讀網(wǎng)頁側(cè)的代碼核心就一個(gè)函數(shù)。它不彈任何打印預(yù)覽不做任何對(duì)話框只是把造好的 PDF 字節(jié)流轉(zhuǎn)成 base64發(fā)給本地中間件。async function silentPrint({ printer, pdfBlob, copies 1, profile }) { const base64Content await blobToBase64(pdfBlob); const payload { printer, content: base64Content, suffix: .pdf, copies, profile }; const controller new AbortController(); const timer setTimeout(() controller.abort(), 10000); try { const res await fetch(http://127.0.0.1:4850/api/print, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify(payload), signal: controller.signal }); const data await res.json(); if (data.code ! 0) { throw new Error(data.msg || print failed); } return data; } finally { clearTimeout(timer); } } function blobToBase64(blob) { return new Promise((resolve, reject) { const reader new FileReader(); reader.onload () { const result reader.result; resolve(result.split(,)[1] || ); }; reader.onerror reject; reader.readAsDataURL(blob); }); }AbortController是這代碼里不能省的部分。中間件如果處理大文件慢或者本機(jī)服務(wù)根本沒起來fetch 會(huì)一直掛著用戶界面就卡死。設(shè)一個(gè) 10 秒超時(shí)前端至少能回到“請(qǐng)檢查打印服務(wù)”的提示分支。blobToBase64把 PDF blob 轉(zhuǎn)成data:application/pdf;base64,開頭的那串字符函數(shù)里截掉逗號(hào)前的頭留下純 base64 給中間件。調(diào)用前我會(huì)先做一次在線檢測(cè)把“中間件沒啟動(dòng)”和“打印失敗”區(qū)分開async function isPrinterServiceAlive() { try { const res await fetch(http://127.0.0.1:4850/api/ping, { signal: AbortSignal.timeout(3000) }); return res.ok; } catch { return false; } }按鈕點(diǎn)擊后先await isPrinterServiceAlive()不通就直接提示安裝啟動(dòng)中間件而不是讓用戶等一個(gè)黑洞洞的失敗結(jié)果。3.3 中間件怎么響應(yīng)CORS、校驗(yàn)和打印任務(wù)分發(fā)中間件這邊響應(yīng)頭必須處理瀏覽器跨域。頁面如果部署在http://127.0.0.1:8080中間件跑在4850端口兩者不同源瀏覽器會(huì)先發(fā)起 OPTIONS 預(yù)檢中間件不回 CORS 頭請(qǐng)求就斷在這里。我一般統(tǒng)一加一個(gè)鉤子app.after_request def add_cors(resp): # 生產(chǎn)環(huán)境可以改成只放行固定的可信來源見第6章 resp.headers[Access-Control-Allow-Origin] * resp.headers[Access-Control-Allow-Methods] POST, GET, OPTIONS resp.headers[Access-Control-Allow-Headers] Content-Type return resp*放行最省事但意味著局域網(wǎng)里任何一個(gè)網(wǎng)頁都能往你本機(jī)中間件塞打印任務(wù)。純內(nèi)網(wǎng)環(huán)境這樣用問題不大要往外網(wǎng)或半信任網(wǎng)絡(luò)放就要加上來源白名單校驗(yàn)這個(gè)細(xì)節(jié)我在第 6 章會(huì)給出具體做法。校驗(yàn)邏輯放在解碼之后、打印之前。base64 解碼要包一層異常處理文件落盤后檢查文件頭PDF 文件前幾個(gè)字節(jié)必須是%PDFJPEG 是FF D8 FFPNG 是89 50 4E 47。如果文件頭對(duì)不上直接返回 400避免中間件拿一堆垃圾字節(jié)去砸打印驅(qū)動(dòng)。def check_magic(path, suffix): with open(path, rb) as fp: head fp.read(4) if suffix .pdf: return head.startswith(b%PDF) if suffix in (.png,): return head.startswith(b\x89PNG) return True # 其他格式不攔截留給打印驅(qū)動(dòng)去報(bào)錯(cuò)經(jīng)過這一層前端傳錯(cuò)格式、網(wǎng)絡(luò)傳輸截?cái)噙@類問題能在打印之前暴露而不是讓驅(qū)動(dòng)打印出一張亂碼紙。我第一次上線時(shí)就吃過這個(gè)虧打了半卷空白標(biāo)簽紙才反應(yīng)過來是 base64 解碼多了一段換行?,F(xiàn)在只要落盤一律先查魔數(shù)再進(jìn)打印。4. 打印參數(shù)怎么設(shè)紙張、份數(shù)、方向與靜默動(dòng)作的取值4.1 參數(shù)映射表打印機(jī)、紙張、方向、份數(shù)的標(biāo)準(zhǔn)定義細(xì)到打印參數(shù)中間件傳給 Ghostscript 或系統(tǒng)打印通道的參數(shù)并不多但每個(gè)都要跟真實(shí)驅(qū)動(dòng)對(duì)齊。我整理了一張常用參數(shù)表做接口設(shè)計(jì)時(shí)按這個(gè)來基本不會(huì)出偏差。參數(shù)可選值默認(rèn)值說明paperA4 / A5 / letter / 80mm 熱敏A4最終解釋權(quán)在打印機(jī)驅(qū)動(dòng)中間件只做透?jìng)鱫rientation0 縱向 / 1 橫向0橫向常用于寬度大的報(bào)表duplex1 單面 / 2 雙面長邊 / 3 雙面短邊1驅(qū)動(dòng)不支持時(shí)會(huì)忽略copies1~991超過 99 直接拒絕防止誤點(diǎn)把紙打空color1 彩色 / 2 黑白2黑白默認(rèn)更省耗材priority0 普通 / 1 緊急0供打印隊(duì)列排序用不是每個(gè)后端都支持注意一個(gè)現(xiàn)實(shí)約束Ghostscript 的mswinpr2設(shè)備對(duì)紙張、雙面這些參數(shù)的控制相當(dāng)有限很多時(shí)候它會(huì)用打印機(jī)驅(qū)動(dòng)面板里的默認(rèn)值。如果你的場(chǎng)景必須精確控制 A5、雙面或自定義紙張靠一層通用打印命令是管不住的。我見過兩種解決思路一種是在中間件里為不同紙張建多個(gè)“打印配置”分別指到同一臺(tái)打印機(jī)但驅(qū)動(dòng)預(yù)設(shè)不同另一種是直接用系統(tǒng)打印 API 的DEVMODE去設(shè)置dmPaperSize、dmDuplex這些字段再觸發(fā)打印。前者實(shí)現(xiàn)快后者控制最精確。份數(shù)這里再說一個(gè)細(xì)節(jié)傳copies給 Ghostscript 不一定生效保險(xiǎn)的做法是像我在第 2.3 章那段代碼里那樣自己循環(huán)提交copies次。代價(jià)是每個(gè)任務(wù)算一份打印隊(duì)列里會(huì)看到多條記錄但出紙數(shù)量一定對(duì)。4.2 參數(shù)默認(rèn)值與邊界業(yè)務(wù)優(yōu)先的 profile 映射經(jīng)常有多個(gè)業(yè)務(wù)系統(tǒng)接同一個(gè)打印網(wǎng)關(guān)A 系統(tǒng)傳“A4 縱向單面”B 系統(tǒng)傳“橫向兩份”前端傳參的口徑很難統(tǒng)一。后來我改成在中間件里維護(hù)一張 profile 表前端永遠(yuǎn)只傳業(yè)務(wù)名中間件負(fù)責(zé)翻譯PROFILES { # 業(yè)務(wù)名為鍵值為實(shí)際打印參數(shù) sales_receipt: { printer: 58mm Receipt Printer, paper: 80mm, # 熱敏小票紙 orientation: 0, copies: 1, color: 2 }, delivery_note: { printer: \\\\fileserver\\Sales Printer, paper: A4, orientation: 1, copies: 2 } } app.route(/api/print, methods[POST]) def do_print(): body request.get_json(forceTrue) profile body.get(profile, ) # 命中 profile 時(shí)用配置里的值覆蓋前端傳參 if profile in PROFILES: cfg PROFILES[profile] printer cfg.get(printer, body.get(printer, )) paper cfg.get(paper, A4) copies min(int(cfg.get(copies, body.get(copies, 1))), 99) orientation cfg.get(orientation, 0) else: # 沒配 profile 就退回全參數(shù)模式照顧臨時(shí)打印需求 printer body.get(printer, ) paper body.get(paper, A4) copies min(int(body.get(copies, 1)), 99) orientation body.get(orientation, 0) # ...后續(xù)走打印流程這套設(shè)計(jì)有兩個(gè)好處。第一打印機(jī)換名字時(shí)網(wǎng)頁不用改只有PROFILES里改一行第二業(yè)務(wù)系統(tǒng)對(duì)接時(shí)只需要知道“我傳 sales_receipt 就行”不會(huì)出現(xiàn)八套系統(tǒng)各自寫死打印機(jī)名的亂象。我實(shí)際落地時(shí)把 profile 表外置成 JSON 文件運(yùn)維改配置不用動(dòng)代碼{ sales_receipt: { printer: 58mm Receipt Printer, paper: 80mm, copies: 1 }, stock_picking: { printer: Warehouse Laser, paper: A4, orientation: 1, copies: 1 } }中間件啟動(dòng)時(shí)讀這個(gè)文件有改動(dòng)就重啟加載。邊界控制上我做了三個(gè)硬限制copies超過 99 直接報(bào)錯(cuò)文件 content 超過 30MB 拒絕接收printer名必須存在于EnumPrinters的返回值里。這些限制看著簡(jiǎn)單每一條背后都是一次真實(shí)翻車——有人把份數(shù)調(diào)成 999有人傳了個(gè)幾十 MB 的掃描件把中間件內(nèi)存打滿還有人打印機(jī)名多打了一個(gè)空格導(dǎo)致驅(qū)動(dòng)報(bào)“無法找到打印機(jī)”。5. 靜默打印中間件避坑清單五個(gè)高頻故障與排查路徑5.1 前端報(bào)跨域錯(cuò)誤請(qǐng)求根本沒到中間件現(xiàn)象控制臺(tái)出現(xiàn)CORS error/api/print的請(qǐng)求變紅中間件日志里沒有一條訪問記錄。原因網(wǎng)頁跑在http://localhost:8080中間件跑在http://127.0.0.1:4850。域名、端口任一不同都是跨域?yàn)g覽器會(huì)先發(fā) OPTIONS 預(yù)檢而那個(gè)版本的中間件沒接 OPTIONS 請(qǐng)求于是直接失敗。解決中間件補(bǔ)上app.route(/api/print, methods[OPTIONS])的響應(yīng)或直接像我第 3.3 章那樣用after_request統(tǒng)一注入 CORS 頭。這里有個(gè)血淚經(jīng)驗(yàn)預(yù)檢請(qǐng)求的Access-Control-Allow-Headers必須包含Content-Type否則就算Allow-Origin配對(duì)了瀏覽器依然攔。5.2 打印出來是空白頁或一串亂碼字符現(xiàn)象任務(wù)顯示“已打印”但紙張出來是空白上面偶爾帶幾個(gè)亂碼符號(hào)或者熱敏紙打出一堆沒規(guī)律的線條。原因前端把 PDF 轉(zhuǎn) base64 時(shí)FileReader.readAsDataURL的結(jié)果是帶data:application/pdf;base64,前綴的如果沒去掉前綴整個(gè)傳給中間件base64 解碼后文件頭就是一堆 ASCII 字符不是%PDF。另一種情況是后綴寫錯(cuò)明明是 PDF 內(nèi)容卻傳了.txt驅(qū)動(dòng)拿文本解釋器打開 PDF 字節(jié)流自然亂碼。解決前端必須截掉,前的頭中間件落盤后用我會(huì)檢查文件魔數(shù)。上一章里check_magic那段代碼就是為這個(gè)場(chǎng)景寫的兩件事都做了這類問題基本絕跡。5.3 中間件端口被占用服務(wù)假啟動(dòng)現(xiàn)象點(diǎn)擊打印前端一直超時(shí)/api/ping也失敗但中間件進(jìn)程明明在沒有報(bào)錯(cuò)退出。原因端口 4850 被別的軟件占用了常見的是某些內(nèi)網(wǎng)工具或另一個(gè)業(yè)務(wù)組件也用了同一段端口。Flask 默認(rèn)綁定失敗時(shí)會(huì)直接拋OSError: [WinError 10048]但如果你在代碼里 try 住了綁定邏輯或者用多進(jìn)程方式啟動(dòng)異常可能被吞掉進(jìn)程還活著但其實(shí)沒有監(jiān)聽。解決啟動(dòng)邏輯里加端口預(yù)檢綁定不到就退出并打日志。還要讓運(yùn)維養(yǎng)成習(xí)慣啟動(dòng)后第一件事不是看進(jìn)程而是訪問/api/ping。我在部署腳本里加了一行自檢curl http://127.0.0.1:4850/api/ping || echo port check failed5.4 打印任務(wù)進(jìn)了隊(duì)列但紙始終不出現(xiàn)象Windows 打印隊(duì)列里能看到任務(wù)狀態(tài)是“正在打印”但打印機(jī)沒動(dòng)靜過一會(huì)兒任務(wù)消失沒報(bào)錯(cuò)。原因最常見是打印機(jī)脫機(jī)或者驅(qū)動(dòng)面板彈了不可見的對(duì)話框比如“紙張不匹配”“墨盒未就緒”。Ghostscript的mswinpr2在驅(qū)動(dòng)報(bào)錯(cuò)時(shí)未必會(huì)把退出碼傳回來subprocess.run可能已經(jīng)正常返回了但實(shí)際沒打成。解決打印之前先查詢打印機(jī)狀態(tài)脫機(jī)直接拒絕任務(wù)別把文件送進(jìn)隊(duì)里。def check_printer_status(printer_name): try: handle win32print.OpenPrinter(printer_name) status win32print.GetPrinter(handle, 2)[Status] win32print.ClosePrinter(handle) # 常見狀態(tài)0正常1暫停2脫機(jī)3打印中 return status except Exception: return -1 # 拿不到狀態(tài)一律視為不可用把status的返回值透?jìng)鹘o前端寫清楚“打印機(jī)脫機(jī)”而不是籠統(tǒng)的“打印失敗”。這算一條反直覺的經(jīng)驗(yàn)靜默打印最怕的不是“打錯(cuò)了”而是“它假裝打成功了”。5.5 大文件打印時(shí)前端無響應(yīng)請(qǐng)求被掛死現(xiàn)象打印一個(gè)十幾 MB 的 PDF前端按鈕一直轉(zhuǎn)圈中間件日志顯示處理完是在二十秒之后但瀏覽器早就把請(qǐng)求掛斷了。原因中間件同步接收 base64、解碼落盤、再調(diào) Ghostscript整個(gè)鏈路上 HTTP 請(qǐng)求必須等打印命令返回。文件大、打印機(jī)慢時(shí)這個(gè)時(shí)間超出了瀏覽器代理或用戶心理等待的極限前端就進(jìn)了一個(gè)錯(cuò)誤分支。解決體積超過閾值的文件改用異步任務(wù)模式POST /api/print先返回一個(gè)taskId前端輪詢/api/tasks/{taskId}拿最終狀態(tài)。tasks {} app.route(/api/print, methods[POST]) def do_print_async(): # 業(yè)務(wù)邏輯里先生成 task_id把解碼和打印丟到線程池 task_id enqueue_print_job(request.get_json()) return jsonify({code: 0, taskId: task_id}) app.route(/api/tasks/task_id, methods[GET]) def task_status(task_id): if task_id not in tasks: return jsonify({code: 404, msg: task not found}), 404 return jsonify(tasks[task_id])tasks這里用內(nèi)存字典承載中間件重啟任務(wù)就丟生產(chǎn)環(huán)境我一般換成一個(gè) SQLite 表。前端輪詢邏輯和超時(shí)重試是配套的我在最后一個(gè)章節(jié)會(huì)把這個(gè)模式補(bǔ)完整。6. 進(jìn)階任務(wù)回傳、白名單與開機(jī)自啟的三個(gè)落地細(xì)節(jié)異步任務(wù)模式一旦引入打印結(jié)果回傳就成了剛需。我在中間件里加了一個(gè)可選的callbackUrl/api/print收到任務(wù)后打印線程執(zhí)行完無論成敗都向這個(gè)地址 POST 一次結(jié)果業(yè)務(wù)系統(tǒng)收到回調(diào)再更新單據(jù)狀態(tài)?;貍黧w結(jié)構(gòu)我習(xí)慣固定成{taskId: xxx, status: ok|failed, message: 可讀信息}前端不用再輪詢業(yè)務(wù)系統(tǒng)也不用在打印成功后靠人工確認(rèn)。白名單是給“不是純內(nèi)網(wǎng)”的場(chǎng)景留的。CORS 的*放行意味著同一局域網(wǎng)里任何一個(gè)網(wǎng)頁都能往你這臺(tái)機(jī)器塞打印任務(wù)公共 Wi-Fi 環(huán)境下風(fēng)險(xiǎn)不小。我用一個(gè)簡(jiǎn)單辦法收緊中間件檢查Origin頭必須在配置文件里列出的可信域名里否則拒絕。代碼就幾行ALLOWED_ORIGINS {http://127.0.0.1:8080, https://print.example.internal} if request.headers.get(Origin) not in ALLOWED_ORIGINS: return jsonify({code: 403, msg: origin not allowed}), 403CORS 頭也改成動(dòng)態(tài)返回ALLOWED_ORIGINS里的當(dāng)前來源不再無腦*。另一個(gè)容易被忽略的口子是/api/printers它能枚舉本機(jī)所有打印機(jī)名內(nèi)網(wǎng)掃描器拿到這些信息能猜出不少業(yè)務(wù)環(huán)境。非必要不對(duì)內(nèi)網(wǎng)開放或者改成只返回“已配置的 profile 對(duì)應(yīng)的打印機(jī)”。開機(jī)自啟是在 Windows 上落地的最后一公里。我的做法是寫一個(gè).bat拉起重定向日志放進(jìn)“啟動(dòng)”文件夾同時(shí)把服務(wù)注冊(cè)為計(jì)劃任務(wù)登錄時(shí)運(yùn)行失敗時(shí)重啟schtasks /create /tn SilentPrintServer /tr C:\apps\silent-print\start.bat /sc onlogon /rl limited /f start.bat 內(nèi)容就兩行cd /d C:\apps\silent-print python silent_print_server.pyschtasks比直接丟快捷方式可靠即使程序閃退也能用“失敗后重新啟動(dòng)”策略兜底。日志我堅(jiān)持只寫到固定目錄不打印到控制臺(tái)這樣排查問題時(shí)直接看文件。最后說個(gè)我自己的教訓(xùn)某次上線后打印機(jī)被換名字業(yè)務(wù)側(cè)毫無感知直到第二天庫存單據(jù)打不出來才發(fā)現(xiàn)。之后我養(yǎng)成了一個(gè)習(xí)慣——中間件每次啟動(dòng)時(shí)日志第一行就打印當(dāng)前枚舉到的所有打印機(jī)列表再對(duì)每個(gè) profile 引用的打印機(jī)做一次狀態(tài)校驗(yàn)狀態(tài)異常的啟動(dòng)時(shí)就報(bào)警。可見即可用印出來才是結(jié)果。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美色日本| 天堂俺去俺来也www久久婷婷| 亚洲一区二区麻豆影院| 中文字幕日韩人妻视频一区二区三区| 97资源超碰| 91色黑人少妇| 人妻熟女字幕一区二区| 人人潮人人摸| 国产一级高清免费观看| 日本精品性生活久久久| 色婷婷丁香五月| 操日韩第| 1000部熟女视频在线观看| 亚拍在线| 日韩免费av片高清无码| 91女色| 国产精品色哟哟| 成人欧美一区二区三区黑人一| 99久久久无码精品国产人| 亚洲色性| 大JI巴好深好爽又大又粗视频| 久久久久久免费电影| 国产五码丝袜屁眼| 欧美日韩淫加| 日韩人妻网站| 5252色欧美在线| 99精品网| 中文字幕一区 二区三四五 区日 日骚 | 色女99一级片在线观看| 九九九久久久久| 色一射色一射| 九九九久千久久激情蜜桃在线看 | 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 中文字幕五月婷婷免费| 国产极品精品美女视频| 日韩国产乱子伦App| 久久久精品91八戒| 久久久久久久九九九九九九| 老司机深夜18禁污污网站| 91另类| 传媒在线观看一区二区三区| 极品销魂美女一区二区| 99婷婷一区二区| 中日韩一区二区三区欧美| 探花视频免费观看国产专区| 久久久久久亚洲中文| 看免费的黄片| 日韩精品黄片免费观看| 五月婷婷丁香六月| 日韩激情视频| 亚洲中文字幕一区| 大香蕉欧美| 青娱乐福利99| 丝袜熟女一区二区三区| 激情五月天丁香| 男人的天堂在线有码| 天天综合网一91网| 青青草成人视频在线观看二区 | 国产18精品亚洲精品| 五月大香蕉| 日韩欧美女优电影| 久久久性爱视频| 青青国产在线拍揄自揄拍| 97超碰超欧美。| 久久妇| 亚洲AV永久无码精品成人调教| 久久精品操| 2019天天干| 影音先锋日本一区二区| 无码抄逼网| 97在线国产精品| 蜜桃丰满熟妇av无码区不卡| 国产精品麻豆免费视频| 操逼日韩无码| 免费99精品国产自在在线| 久久亚洲一区女同性恋中文字幕| 中国AV美女| 93人人操人人| 99re6久热只有精品6在线直播 | 超碰人妻久久| 国产精品亚洲免费| 色在线69堂| 神马麻豆福利院| 懂色天天爱天天日天天射天天澡| 男人的天堂亚洲| 精品视频专区| 91精品国产日韩欧美综合| 97久久天天综合色天天综合色电影| 亚洲不卡一| 思思热在线视频免费| 亚洲免费人妻在| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 婷婷五月天综合网| 色欲久久99国产精品久久久久久| 亚洲 国产 精品一区| 超碰 97国产熟女| 日韩中文字幕2020| 强奸乱伦中文字幕AV| 六六久久日韩不卡| 91爱剪切久久| 91人妻Pr| 熟妇一区,二区,三区。| 久久av成人无码免费| 亚洲不卡不卡中文字幕不卡 | 亚洲AV成人无码久久精品播放| 美女露胸露屁股| 情色五月天就去干| 日本免费专区| 97色论| 春色综合免费| 人妻熟妇久草在线| 家庭乱伦国产精品| 五月综合视频| 日韩无限资源| 在线黄页看毛片| 国产97综合| 精品人妻中文字幕4399| 狠狠搞 亚洲91| 欧美色图片| 午夜精品99久久久久传媒| www欧美91| 探花精品视频| 亚洲国产成人精品久久久国产成人一区二区 | 成年女人黄网站| 麻豆伊人网| 97人人夜夜精品视频| 亚洲视频一二区| 91久久九九精品国产综合| 9999伦理视频| 亚洲 国产 精品一区| 玖玖草久草99蜜月一区二区三区| 日本高清_区二区三区| 校园春色欧美| 国产久久久久久久久一区二区| 999九九九九国产动| 啪啪啪精品视频| 久久中文字幕人妻熟av女蜜柚| 91精品人妻电影| 人妻熟女一区二区在线视频| 东京太热久久久| 人人操人人爽人人操人人| 欧美一二三区四五区| 无码人妻精品一区二区中文| AV天黑人| 97超碰在线资源网站| 美国日韩黄色片| 国内精品99999| 色色色综合| 人人操人人爽人人操人人| 欧美日韩免费专区在线| 丰满高潮18xxxx| 亚洲激情久久久伊人综合| 9美女超碰在线免费观看| 丁香五月色| 天天做天天爱夜夜爽毛片试看| 久久 亚洲 日韩 人妻| av天堂手机版追回| 日韩啊V| 亚洲综合骚逼| 久久超碰爱| 久久精品国产99精品亚洲蜜...| 狠狠爱夜夜干| 999久久久久久久精| 国产超碰人人操| 国产日韩久久| 久久久免费懂色| 亚洲熟妇自偷自拍另欧美| 九九视频黄色片| 婷婷探花久久精品一区| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 操操碰| 久久伊人最新网址视频| 综合欧美色图| 天天干夜夜操一区二区| 欧美伦乱爱| 男人天堂2019亚洲| 国产福利小视频高清在线观看| 男人的天堂久久久| 天天综合站| 婷婷情色五月天| 亚洲成av人片色午夜乱码| 午夜啪| 97精品视频在线| 天天天乱色综合全| 九九无码久久精品视频| 亚洲最大无码中文字幕网站| 日韩性爱1级片视频| 综合亚洲欧美| 久草电影网| 天天干天天舔| 综合影院永久入口国产| 熟妇熟女一区二区三区| 日本高清视频在线观看黄已三辽| 成人精品一区二区三区| 久久九九热| 亚洲有码第一页| 欧美18禁91| 国产精品青青草| 红杏大香蕉| 色一情一乱一乱一区91Av| 国产精品呦一区二区三区| 最新无码国产| 成人26uuu| 美日韩男女操屄视频| 亚洲欧美首页| 中文字幕丰满子伦无码专区在线视频最新 | www.狠狠干.coom| 久久婷婷视频| 2020视频1区2区3区| 久久精品国产亚洲AV无码电影| 中文人妻av高清一区| 国产亚洲色停停久久99精品91| 91另类| 青娱乐国产剧情av一区| 久久精品国产亚洲5555| 亚洲最新Av| 熟妇xxxxx性春色| 人人操人人摸人人看人人插| 免费观看性欧美一级| 大香蕉视频一二三区| 日本性感人妻91| 欧美性爱第一页久久| 亚洲图片激情综合另类| 亚洲国产精品无码AV在线| 黄色一区二区秘书性感| 91久久久久久| 久久一区,青青青青草视频在线播放| 91人妻视频在线| 欧美成人色| 天天情欲宗合网| 日日AAvv| 国产亚洲欧美每日在线| HEYZO高无码国产精品227| 一级性爱aaaa| av优播| 97超碰亚洲| 久久婷婷苹果| 伊人一级免费黄片| 亚洲四虎熟女精品| 久久最新视频免费观看| 夜夜嗨一区二区三区三州加勒比| 久久久96| 国产高清MV操逼视频| 91碰碰| 久久精品72| 久草综合网| 日韩激情毛片一级久久久| 精品人体无圣光凹凸| 色色综合网站| 91精品人妻啪啪间| 日韩极品无码B| 天天天天天天天天天天干美女| 日韩啪啪啪啪啪| 午夜综合在线| 国产白领连续中出在线观看| 三级片网站在线播放| 亚洲超碰AV| 超踫中文字幕| 啊啊啊啊啊舒服| 国产婷婷综合在线观看| 亚洲av强奸乱伦| 91n美女视频| 少妇99| 超碰精品97| 日韩精品资源专区二区| 国产精品老师| 欧美激情久久久久| 伊人网免费视频| 天天躁日日躁AAAXX| a男人的天堂| 亚洲综合另类色图| 国产专区第一页| 久久久久精| 丝袜天堂网| 综合av社区| 色婷婷五月综合| 日韩人妻丝袜美腿中文| 日本国产亚洲一区在线观看| 人妻天天操天天爽视频免费| 东京热天堂网| 亚洲综合色网| 思思热一热婷婷热一热| 国产精品美女视频诱惑| 五月丁香综合激情| 密臀在线一区尤物| 91精品丝袜在线观看| 无码久| 亚洲av无码成电影在线播放| 伊人国产av| 91在线免费精品视频| 亚洲91少妇| 国产人妻久久精品一区二区三区| 日韩欧美俄罗斯A片| 风月影院男女十八禁| 在线a v| 青青三级视频| 精品一二三区久久AAA片| 无码久| 久久黄色视频一区二区三区| 日本最新免费韩国1区2区视频播放| 秋霞 色色| 亚殴在线| 国产成人拍国产亚洲精品| 日本天堂网| 国产精品露脸在线观看| 久久久久久久久久久久久久久久9| 久久精品 六十路 熟女 欧美| 蜜臀人妻少妇久久在线观看| 亚洲欧洲日韩天堂av| 91+欧美| 人妻献身系列第54部| 大香蕉天天看妹子| 久久一级无码精品毛片6| 久久久久元码视频| 美女黄频a美女大全免费皮| 久久精品人妻一区二区三区| 97人人操人人干| 欧美姓爱综合网| 国产精品女同| 日韩无码a片| 久久精品91| 五月婷色| 亚洲自拍天堂| 粉嫩av一区二区三区天美传媒 | 磁力99AV| 人妻AV在线| 97超碰精品| 亚洲成人妻日韩在线| 午夜福利视频在线一区| 少妇一区二区三区| 亚洲在线观看| 中文字幕视频2区| 日韩久久.一级黄色片| 一区二区三区一亚洲中文字幕、综合区灬 | 国产精品一区二区三区,亚洲综合| 色哟哟精品1精品2| 德国一二三不卡| 国产精品嫩草影院免费| 大香蕉淫人网| 色阁阁AV综合网| 嗯嗯啊在线视频| 操逼片国产| 999精品久久久久久久| baiduhicn.com。| 99热综合| 熟女人妇一区二区三区| 中日韩免费看男女操逼大全| 夜夜无码| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 91亚·色| 亚洲 91 在线| 欧美操人| 丁香婷婷大香蕉| 艹精品| 9色国产精品一区粉嫩| 一二视频神马久久传媒| 日han少妇无码| 超碰97起碰| 亚洲一区二区性爱电影| 黄色一级视| 9丨亚洲一区二区在线| 亚洲高清综合网| 风月影院男女十八禁| 午夜性| 99热超碰| 日本免费不卡二区| 日本不卡卡一区| 丁香六月婷婷| 激情五月丁香五月| 一区二区三区机械有限公司| 欧美亚洲日本激情在线| 国产精品一二三在线看| 日本精品网站在线中文| 日本久久女同性恋视频| 中文字幕精品一区二| 男人的天堂 在线一区| 狠狠入| 青娱乐 青青青操 日逼| 东京热av影院| 在线不欧美| 色爱天堂| 婷婷色色五月天福利| 日日夜夜摸| 麻豆天美91| 日韩兔费看黄片| 亚洲国产美女久久久久| 秋霞免费无码视频日韩A片 | 国产传媒1234区| 色好看av| av东京热男人的天堂| 中文字幕文字幕无码一区二区三区电影99| 情色五月天网| 一区二区三区在线日韩影院观看| 老鸭窝在线视频播放| 久久精品操| 天天92av| 98人妻精品一区二区色欲| 在线观看亚洲成人精品| 国产树林里野战在线看| 欧美精品999| 九九综合| 精品一二三区四视频| 亚洲色图第一页| 久久风骚城市人| 亚洲欧美999| A一区片| 性爱边摸边日免费AV| 5278欧美一区二区三区| 日韩成人色图| 日韩亚洲97| 欧综合网| 国产成人自拍视频视频| 亚洲 国产 精品一区| 色九月婷婷| 欧美少妇第一页| 老鸭窝日丰县女人| 欧美精品97| 中文字幕人成乱码熟女香港| 欧洲熟妇xxXx欧美老妇裸体| 97超碰天天爱天天爱| 啊啊啊啊啊舒服| 啊啊啊啊啊啊好多水| 日韩精品一区二区高清| 亚洲人妻AV| 国模不卡一本二本三电影| 中文字幕二区| 欧美熟妇成人一区二区| 亚洲 欧美 手机在线观看| 啊啊啊 在线观看| 日本好吊色视频| 三级色影综合网| 精品视频免费在线一区| 欧美亚综合色图| 久久精品国产97欧美精品亚洲| 日本精品一级二级三级| 国产伦精品一区二区三区在线观| 日韩精品操少妇| 热99re69精品8在线播放| 中文字幕亚洲热播人妻| JULIA人妻风俗店中出电影| 久久久精品九| 亚乱色| 白丝AV网站| 啊啊啊啊啊在线| 国产小视频91| 91久久久久久久| 91精品无码久久久久久久| 操操碰| 亚洲女人毛茸茸91| 日韩精品人妻一| 欧美97在线观看| 日韩欧美加勒比| 色综合五月天| 蜜桃久久一区| 国内毛片无码一级毛片| 性感美女啊啊啊在线| 一起草欧美| 91欧美长吊| 中文?日韩?免费?精品| 五月天婷婷色| 91美女小视频| 夜夜夜久久| 国产久久久| 欧美精品四区| 激情综合网亚洲| 五月丁香啪| 97综合激情| 丁香五月色情| 国产一区二区二区按摩精品啪视频| 五月丁香婷婷色| 91综合无码| 丁香六月婷婷久久综合| 凌辱美少妇久久aV| 啊啊啊啊嗯嗯嗯用力好爽 | 色偷偷综合91久久噜噜| 无码视频黄色网战| 男人天堂2019| 亚洲精品久久久久久久久豆丁网| 日韩在线国产字幕| 日韩钢筋无码高清啾啾啾| 久久 国产 无码| 99re这里| 九九碰九九爱97| 久草新在线| 德国一二三不卡| 中文色综合| 视频在线中文字幕| 男人的天堂啪啪| 精品视频一区二区| 亚洲综合九| 中文字幕一区日韩精| 日韩精品一二三| 小草精彩毛片| 操逼操逼逼操操逼91 | 欧美亚洲尤物久久| 嗯嗯不要 视频| 91女人的网站| 欧美黑人精品一区二区| 男人久久天堂| 性欧美精| 超碰日本97美女人妻人人玩人人爱| 激情黄色片在线观看| 国产一区二区三区,在线观看观看| hd成人一区二区在线| 亚洲丝袜诱惑| 国产日韩欧美| 97AV爱| 国产久久av| 91人妻人人澡人人爽人人精品| 亚洲熟妇乱女区二区三区| 国产精品网址| 国产精品久久蜜乳av| 另类av综合久久| 亚洲综合小说另类图欧美视频激情小说色五月天 | 日本东京热久久久电影| 东京热AV男人的天堂| 97久久久久久久精| 国产一级做a爰大片免费久久| 美女91在线| 人妻丝袜肏逼| 午夜福利久久久噜久噜久久综合| 亚洲成人性爱在线观看| 日本人妻丰满熟妇久久久久久| 亚洲自拍青操视频| 极品久久久久久久久久久久久久| 淫妻综合网| 亚洲第2页| 日韩av性爱在线播放| 天天综合~91| 新视频sss国产| 九九九网页| 精品人人插人人操| 欧美视频一区二区在线| 黑人精品XXX一区一二区| 9丨久久九九九| 国产精品97超碰| 嗯嗯啊啊视频一区二区三区| 日本免费不卡二区| 亚洲 91 在线| 亚洲综合小说另类图欧美视频激情小说色五月天 | 久久神马| 天美传媒AV在线播放| 亚洲骚男同com| 欧美性生活内射| 中文字幕亚洲欧美在线不卡| 殴美,日韩国产伦精品| 99热最新| 亚洲天堂综合AV| 中文字幕 国产区| 天堂中文日本在线观看| 亚洲最新中文字幕免费| 亚洲无码免费看| 免费又黄又裸乳的视频| 欧美性生活免费网| 欧美日韩色综合网| 久久精品毛片免费不卡| 国内毛片婷婷六月色| 人妻少妇被猛烈进入中| 草草影院最新网址| 天堂无码精品国产久| 久久久久人妻二区精品叶可怜| 超碰在线欧美性爱激情| 久久精品日韩| 亚洲精品a人片在线观看视| 精品v日韩欧美国产| 国产亚洲精品第一最新| 久久久久9| 中文字幕 码精品视频网站| 99热精品在线播放| 女同亚洲欧美一二三区久久电影| 91neishe| 色超碰综合| 96精品一区| 欧美日韩小说| 日韩三级伊人| 久久亚洲欧美中文字幕国语| 日本在线播放不卡一区| 五月婷婷六月色| 日韩一区二区熟女| 任我爽在线视频免费观看| 激情婷婷丁香网| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 岛国在线一区二区三区| 大香蕉丝袜一级片| 嗯啊不要啊啊在线观看视频| jiujiujiujingpin| 96麻豆精品一区二区三区| 国产老太乱伦一区| aaaa少妇高潮大片| 天天欧美色| 亚洲熟女一区| 欧美97色| 少妇xx精品| 欧美日韩超碰在线| 91丨精品丨国产丨丝袜| 亚洲熟女av中文字幕| 嗯啊视频免费在线观看| 五月开心网| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 噜噜噜亚洲精品| 天天看片青娱乐| 老熟女乱子伦中文字幕一区二区| 五月天婷婷色| 久久超碰av在线| 91丝袜在线观看| 久久久精品无码亚免费| 国产13区| 天天亚洲| 激情久久久| 二区熟妇韩日| 亚洲a色| 亚洲色色探花| 中文字幕乱码人妻一区二区三区,99精品| 97伦乱| 日韩精品一区二区高清| 极品色社| 老熟乱一区二区三区四区| www亚洲免费| 黄色乱论网站| 啊啊啊啊好多水| 黄色网址在线免费观看| 日韩中文字幕av在线播放| 精品日韩| 亚洲五月天激情| 久久精品男人的天堂| 亚洲成aⅴ人片不卡无码| 亚洲午夜免费狠狠干| 伊人宅男大香蕉 | 精品美女少妇一区二区| 中文字幕亚洲热播人妻| 天天看特黄的免费网站 | 超碰公开久久网| 欧美色九九| 啊视频在线| 亚洲综合色在线| 十八禁的黄污污免费网站| 四虎国产成人精品免费一女五男| 精品人妻中文字幕高清| 欧美78p| 另类图片天天影视| 日韩偷拍色图| 大象AV在线| 精品福利视频| 国产日本一区二区三区蜜臀在线观看| 亚洲国产第一页综合视频| 97国产|免费| 久久伊人大香蕉| 欧美性性性| 狠狠久久亚洲欧美专区| juliaann丝袜| 曰韩欧美国产传媒麻豆第一区| 伊人网高清| 欧美激情总合网| 日韩视频中文字幕| 国产午夜福利视频在线| 人人做天天爱| 亚精品无码毛片一区二区三区| 蜜乳Av成人片网站| 综合网亚洲1| 色婷婷色99国产综合精品| 精品玖九九久| 9/A片 | 熟女天天干| 国产精品一区二区校花| 在线五区| 国产精品交换一区二区| 日本成a人v网站在线观看| 麻豆久久久久久久久丝袜| 综合av社区| 78操B| 久久久久9久久久久| 黄色av网站在线播放| 男人的天堂无码| 狠狠综合网| 久久久精品中文字幕爱豆| 久久久久久久六六 | 丝袜美腿91| 国产又黄又猛又粗又爽的网站| 色呦呦国产精品免费看| 色老牛| 日本99热| 翔田千里AⅤHD无码| 99最新日韩偷拍视频| 无码免费一区二区三区啪啪| 国产日韩区| 青草精品视频一日本久久久久网站| 91xingse| 亚洲一区二区三区AV无码| 自拍六区| 日产123区精品免费观看| 九九热免费视频| 久久久久亚洲av综合波多野制衣| 99在线观看视频在线高清| 人妻在线臀日韩| 女同性恋久久| 国产最火爆久久国产网站网站| 亚洲天堂久| 欧美黑人与女人91~| www色日本| 久久受www免费人成| 欧美亚洲首页| 热久久无毒不卡| 熟妇熟女一区二三区| 日韩一级欧美一级在线观看| 国产精品爱欲| 成人线上超碰| 超碰97伊人| wuyechaopeng| 99抽插| 激情婷婷| 国产精品午夜福利| 91麻豆天美国产欧美高潮| 国产无马视频| 美日韩男女操屄视频| 97伊人超碰| 九九九九免费高| 久久色一区| www.婷婷六月天| 日本熟妇人妻中出视频| 亚洲**2021在线观看| 老鸭窝成人免费毛片视频| 啊啊啊啊好大好硬啊啊啊啊啊 | 粉嫩久久久久| 欧亚久久偷拍视频| 999久久久九| 日日狠狠久久偷偷色综合免费| 新婚人妻扶着粗大强行坐下| 中国一级操逼视频| 亚洲精品一区二区精华| 91天堂网| 玖玖爱影院| 97日韩超碰超碰中文字幕| 久超碰这里只有精品| 亚洲日韩欧美一区二区| 性性久久| 精吧天堂| 欧美性Fer办公室秘书| 久偷拍欧美日韩三区| 91久久国产综合精品| 熟女欧美日韩综合婷婷| 你草精品在线视频| 久久久久ab| 四季AV一区二区凹凸精品小说| 日本97久久久精品| 欧洲乱码一区二区| 亚洲免费97免费| 裸体1区| 色在线69堂| 国产精品久久久久久久久久二区三区| 中文字幕在线第二页| 大干人妻| 美女9118禁| 91久久久亚洲| 永久免费av无码网站国产app| 秋霞免费无码视频日韩A片| 乱伦一二三区| 欧美另类精品xxxx| 久久久麻豆精品| 91人妻PORNY九色大屁股| 婷婷激情五月综合| 亚洲色图91欧美日韩| 亚洲国产精品久久久久婷婷青年| 五月婷婷hd| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 懂色Av| 国产精品久久久久久照片| 黄页视频网站野外| 丁香五月性爱| 人妻插插人妻人| 在线免费试看60秒| 久热精品在线| 丁香婷婷五月| 91人妻素女| 香蕉在线一区二区三区| 欧美午夜色妇色鬼| 久草线上视频免费看| 国语少妇精| 无码区蜜乳| 99操碰| 日韩99神马视频播放| 欧美黑人168页欧美黑人167| 人人操欧美风骚| 网页导航五月天免费一二三区| 六月丁香网| 色娱乐色呦呦夜夜夜夜av| 99热这里只有精品1| 久久久性| 欧美精品日韩一区二区| 欧美五区| 91A欧美电影网站| 日韩精品一区二区日韩| 蜜臀少妇一区二区| 四虎在线播放| 男人在线天堂| 色色色99| 欧美日韩亚洲电影| 欧州一区二区三区四区| 日本久久精品| 欧美精品久久| 麻豆国产97在线| 337p大胆噜噜噜噜噜91Av| 97视频在线观看高清资源| 水滴偷拍| av天堂5| 色婷婷久久综合超碰| 天天肏天天干| 99视频自拍| 久久成人午夜狠狠| 国产乱伦亚洲| 男人的天堂成人的社区| 色欲久久99国产精品久久久久久| 18禁美女裸体无遮挡啪啪| 素人美腿视频网站| 亚洲欧洲自拍| 婷婷久久五月| 亚洲诱惑天堂 | 大香蕉五月天婷婷| 精品中文一区二区| 免费的黄片有限公司| 免费视频在线观看啊啊啊啊啊| av2014 日韩在线中文字幕| 天天操夜夜嗨| AV99热18这里只有精品| 日韩有码 一区二区三区| 色香色香欲天天天影视综合网| 伊人嫩草| 国产 三级自拍| 五月天亚洲网| 强奸乱伦动态污图免费 | 国产强奸超碰AV| 国产情色第一第二页在线观看| 欧美日韩黄片精品在线| 日韩一级二级在线| 日韩一级性爱无码| 精品国产一区二区三区久久久蜜臀| 五月丁香激情四射| 荡小穴在线观看| 亚洲天天综合| 色九月综合| 搞中出久久| 精品一区二区三区四区外站| 日欧亚洲二三区大片不卡| 久久久久9| 欧美日韩性爱无码| 少妇蹲下买菜露大唇0| 在线性黄高清免费视频| 青青草影视蜜久久| 婷婷中文字幕| 一级性爱网| 女同性恋一区二区三区精品视频| 欧美亚洲国产91在线| 久久內射| 欧美性爱一级操| 97色操| 天天干天天日天天射黄色| 欧美亚洲自拍另类人妻| 成人五月天色网| 亚洲美女自拍偷拍视频| 欧美韩日精品99综合| 激情五月婷| 日本乱人伦片中文三区| 久久一二三四不卡 | 99国产在线绯色一区| 91深夜夜| 九九九偷拍| 爱射综合| 秋霞久久亚洲精品成人| 日韩91网| 欧美 亚洲 大香| 在线强奷到舒服的无码视频 | 久久久网站| WWW.操逼.COM| 国产风韵犹存熟妇三区| 91 亚洲 欧洲| 国产黄片精品在线| 91精品导航| 欧美久久婷婷| 亚洲色久| 午夜超爽| 久操97| 日韩八十路老熟女| 久久久久精| 免费观看的黄色的网站| 日韩一级二级三级在线不卡观看完整| 色大师网站www永久网站视频| 黄片www.| 岛国片在线视频网站| 91痴汉| 淫乱图区| 久久这里都是精品| 国产精品久久久三级无码| 亚洲在线网站| 欧美 亚洲精品首页| 搞中出视频在线观看| 欧美激情综合| 老司机老司机午夜影院| 黄片www视频免费| 羞答答AV中文字| 亚洲欧洲无码97久久精品| 中文字幕一区av| 人妻精品一区二区在线| 91被操| 精品久9| 亚洲伊人青青草| 97精品国产手机| 国产久久久9999| 99在线观看| 亚洲蜜桃V妇女| 成人影院永久免费观看网址| 亚洲全色网| 亚洲av资源| 免费男人的天堂| 亚洲Av噜噜一区二区三区妖精| 亚洲一区二区三区久久 亚洲一区二区| 另类小色呦| 色欲蜜臀AV| 乱伦a片视频| 狠狠色伊人亚洲综合网站色| 成年人黄色| 午夜在线播放| 亚洲女优有码无码高清| 国产91丝袜在线播放蜜月| 亚洲色丰满少妇高潮| 日han少妇无码| 欧美第38页| 亚州成人a∨| 99爱久久视频频| 香一区二区三区| 99热99re超碰精品| 97中文天堂| 精品一区二区三区最新| 夜夜操天天肏| 日日夜夜骚| 精品十三区| www.AV有限公司一区| 九一精品牛牛一区二区| 日韩三级在线观看mp4| 亚洲码和欧洲精品激情系列| 成年男人的天堂| sss视频华人在线| 国产又大又粗又长视频在线| 丝袜无码a片| 欧美激情色婷婷花野真衣一区二区 | 亚洲高清自拍| 91亚洲综合| 国内毛片热久久思思热| 天天射天天| 人妻 丝袜美腿 中文字幕| 久久直播国产| 再深点灬舒服灬太大了好硬好爽| 人妻av在线| 久无码| 国产乱码精品久久久久久| 亚洲性少妇| 青青草AV色| 97在线视频免费| 久久精品人人做人人看| 日欧亚洲二三区大片不卡| 日韩av影片在线观看| 色色色网站| 九九十八精品| 97就爱干| 色臀AV| 国产精品午夜福利亚洲综合网| 亚洲精美粉嫩嫩泬在线观看| www.色操逼| 欧美少妇大量自拍视频在线观看| 日日黄色三级网站| 欧美日韩国产精品久久色婷婷| 超碰人妻久久| 一级日本牲交大片好爽在线看| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 欧亚性爱在线视频| 大香蕉黄色一区| 91蜜臀在线久久久久| 天堂伊人久久| 96久久久久久久| 国产在线观看91精品一区| 人人摸人人叼| 嗯嗯啊啊用力视频免费| 亚洲偷91色| 91综合在线| 国产强上视频在线观看| 亚洲欧洲小说图片视频 | 青青草天天亲夜夜操网| 久久精彩视频9| 成人精品水蜜桃久久久久久久| 91亚洲网| 免费在线观看AV无码网站| 大香蕉 222| 亚洲图片 欧美电影| AV天堂国产| 农村妇女一级二级三级视频| 欧美91精彩| 九九九九热| 精品成人av一区二区三区在线| 99999精品成人| 无马一区二区| 26uuu国产成人综合| 超碰激情808| 欧美中日韩XXXX| 黄色电影观看久久9| 精品.99999| 欧美色干| 99热这里只有精品地址| 人妻 制服 日韩 中文 在线| 91亚州| av在线资源| 久久久精品视频欧州站| 天天夜躁日日躁狠狠2002| 久久久久久国产精品| 青操影院| 操高情无码| 欧美综合制服在线| 囯产精品久久久久久久久久梁医生| 激情五月天视频| 91网站在线播放| 一本精品日本在线视频精品| 久久99国产综合精品女同| 韩日欧亚a级| 色情五月综合婷婷| 97综合久第一页| 欧美性爱视频免费一区一A | 极品尤物女神在线观看| av天天在线| 欧美1区二区三区公司| 午夜久久一区二区无码中出| 78操B| 思思热在线| 麻豆av一区二区| 99无码| 2017天天插| 伊人五月天| 精品在线蜜臀| 蜜臀久久99精品久久综合| 蜜臀AV午夜精品久| 人人人人人人少妇| 中文字幕在线免费观看| 日韩人妻精品久久久久| 中文字幕在线免费观看 | 久久成人国产| 中文字幕在线第二页| 91三级理论片播放器| 九九九九九九九九九九九蜜桃| 国产操逼逼网| 91高清日| www.色五月| 97色亚洲| 久久熟妇五十路一区| 九热视频| 东北熟女91| 黄色成品网站| 岛国激情视频在线观看| 男人的天堂在线| 国产激情在线| 国产精品9999| 色诱中文字幕| 中文字幕一区电影在线观看| 99蜜月精品久久| 男人的天堂不卡一区二区| 日韩无码一级黄色av片| 久久精品72| 亚州AV无码国产精品| 凌辱美少妇久久aV| 色女99一级片在线观看| 狠狠中文字幕| 清纯唯美第一页| 夫妻四区五区六区| 天堂а√在线最新版在线| 亚洲欧美变态| 九九九网页| 夜夜影视四色| 东京热男人天堂| 在线视频五十市| 岛国精品视频在线观看| 欧美综合另类| 狠色婷婷久久一区二区三区_| 亚欧国产无码精品在线| 97综合久久| 97视频在线视频| 91色艳| 99久久精品无码一区二区| 欧美亚洲手机在线| 青青草在线视频欧美| 大香蕉520| 日韩操逼性鲍| 久久蜜桃一区二区| 色九九九九| 九九色色| 日韩卡一卡二卡三在线| juliaann欧美丝袜办公室| 欧美色图下一页| 国产刺激视频| 日日操丁香五月天| 精品久久久久久中文字幕视频免费| 啊啊啊啊啊在线视频| 亚洲情色91| 国产精品呦一区二区三区| 亚洲欧美伦综合| 校园春色综合香蕉| 成人精品电影| 亚洲中文字幕三级在线| 亚洲无码国产精品久久| 欧美成人精品欧美一级乱黄一区二…| 91成人在线| 日本三级韩国三级99| 日本操大逼| 亚洲天堂在线怕怕视频| 97国产|免费| 亚洲麻豆18发?| 99亚洲人人| 欧美中文字幕男人天堂久久精品| 成人福利视频网| 波多野42部无码喷潮在线观看| 78久久| 97久操| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 天天做日日做| 国产二区三区免费视频| 大香蕉中文在线| 97超级久久| 九九久精品| 果冻传媒A片一二三区| 97一区二区三区视频| 91欧美美女日韩国产婷婷| 欧美激情亚洲色图| 又黄又爽在线观看视频| 激情五月天视频| 国产在线视视频有精品| caoni国产亚洲av| 午夜AV人气不卡| 一级特黄aaa大片在线观看成人一级片在线观看 | 人妻一二三区| se吧提供91精品国产91久久久久久| 亚洲人妻久久| 人妻少妇精品视频一区二区三区| 亚洲日韩狠狠撸视频| 欧美日韩精品青青| 亚洲AV色图一区| 日本一级不卡一二区| 国产99999久久精品| 九9热伊人| 91网站18+| 自拍啪啪视频| 黄色成年| 加勒比海色香蕉婷婷| 啊啊啊免费| 日韩视频中文字幕| 成人av性爱电影在线观看| 超碰在线人妻中文字幕| 天天爽夜夜爽夜夜爽精| 亚洲,日韩,欧美,成人播放| 大香蕉www.超碰| 国产AV毛片| 激情久久av一区av二区av| 日韩无码专区| 欧美淫穴| 欧美精品 - 91爱爱| 中文字幕人乱码中文字的预防方法 | 999精品久久久久久久|