整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          伯樂丨中國銀行數據中心2019年社會招聘公告

          伯樂丨中國銀行數據中心2019年社會招聘公告

          據工作需要,中國銀行數據中心部分職位面向社會公開招聘,現就有關事宜公告如下。

          一、招聘職位信息


          具體職位信息及任職資格要求詳見閱讀原文。

          二、基本資格條件

          (一)遵紀守法、誠實守信,具有良好的個人品質和職業道德,無不良從業記錄,愿意履行中國銀行員工義務和崗位職責;

          (二)全日制大學本科及以上學歷,留學歸國人員應取得教育部留學服務中心的學歷學位認證;

          (三)應聘工程師人員需具備4年及以上相關工作經驗(全日制碩士研究生及以上學歷且學制為兩年以上的可減少1年年限),應聘助理工程師人員需具備2年及以上相關工作經驗;

          (四)年齡一般不超過35周歲;

          (五)身心健康,工作抗壓能力強;

          (六)符合中國銀行親屬回避的有關規定。

          三、應聘方式

          請登錄 http://chrcmp.chinahr.com/views/boc/social2019/job.html#title 按照網站提示填寫并投遞簡歷。每位應聘者限報1個職位,如同意調劑其他職位可在申請的相應欄位注明。應聘者信息將被嚴格保密,所有資料恕不退還。應聘者對個人填報信息的真實性、完整性負責,如與事實不符,中國銀行有權取消錄用資格。

          中國銀行采取滾動招聘方式,將在報名截止日期前分批次開展簡歷篩選、筆試、面試、體檢及背景調查等工作,擇優確定人選。

          報名截止時間:北京時間2020年4月30日24:00。

          期待您的參與!

          點擊閱讀原文查看詳細內容

          面的系列文章里提過, TAO 工具將模型訓練的絕大部分技術難題都進行抽象化處理,大幅度減輕開發人員的負擔,唯獨數據集的收集與整理仍須由人工自行處理,這幾乎是留個操作人員的最后工作了。

          大部分關于數據集的問題就是標注格式的轉換,包括 Pascal VOC、OpenImages、COCO 這些影響力較大的數據集,個別使用 .xml、.csv、.json 等不同的文件格式,包括標注欄位的內容與順序也都不盡相同,這通常是困擾使用者的第一個門檻。

          好在這些格式之間的轉換,只需要一些簡單的 Python 小工具就能完成,雖然繁瑣但也沒有什么技術難度。

          在 https://docs.nvidia.com/tao/tao-toolkit/text/data_annotation_format.html 里,提供 TAO 工具針對不同應用類型所支持的格式,簡單整理如下:

          • 圖像分類:目錄結構格式
          • 物件檢測:KITTI 與 COCO 格式
          • 實例分割:COCO 格式
          • 語義分割:UNet 格式
          • 體態識別:COCO 格式
          • 其他:自定義格式

          這里只將使用率較高的圖像分類與物件檢測兩種應用的數據格式進行說明,其他應用的數據格式請自行參照前面提供的說明連接。


          1. 圖像分類的“目錄結構”格式:

          這是以“圖像”為單位的分類應用,每張圖片只會有一個分類屬性,因此格式相對簡單,只要將圖片根據目錄結構的規則進行分類就可以。

          為了配合模型訓練的工作,我們需要將數據集切割成 “train”、”val”、“test” 三大類,分別作為訓練、校驗與測試用途。

          在每個數據集下面再延伸出“分類屬性”子目錄,例如做早期用于識別 0~9 手寫數字的 MNIST 數據集,就得在 train/val/test 下面各添加 “0”~“9” 共10個子目錄,合計是 2 層 33 個目錄結構。

          如果是使用 ILSVRC 競賽的 1000 分類 ImageNet 數據的話,就得根據這 1000 個分類在三個目錄下個創建 1000 個分類屬性子目錄,例如 dog、cat、person 等等,雖然很繁瑣但也不復雜,對模型訓練工具而言,圖像文件名稱是無所謂的。

          數據來源通常是兩大類,第一種是自行從網上收集與手動拍攝,第二種是從現成數據集進行提取,包括 ImageNet、Pascal VOC、COCO、OpenImages 這些知名的通用數據集,都有非常豐富的資源。

          但現在的最大問題是,如何從這些數據集中提取所需要的圖像,并根據“目錄結構”存放成 TAO 所支持的格式?

          這個部分需要使用者自行研究所需要的數據集的結構,撰寫簡單的提取工具。例如 TAO 提供的 classification 圖像分類模型訓練范例項目中,使用 Pascal VOC 2012 數據集來進行圖像分類的模型訓練,但是這個數據集使用下圖左的路徑分布方式,與TAO所支持的“目錄結構”格式并不相同,那么該如何處理?

          我們必須對這個數據集的相關資源有進一步了解。在 VOC 數據集的 ImageSets/Main 里存放 63 個 .txt 文件,刨去 train.txt、trainval.txt 與 val.txt 三個文件,其余 60 個分屬于數據集的 20 個圖像類別的三種用途,例如 xxx_trainval.txt、xxx_train.txt、xxx_val.txt,其中前者的內容是后面兩個文件的合并。

          在 classification.ipynb 腳本中提供兩段數據格式轉換的Python代碼(請自行查閱),在 “A. Split the dataset into train/val/test” 的環節,執行以下處理:

          (1) 將存放在上圖左邊 “JPEGImages” 里面的圖像文件,借助 xxx_trainval.txt 分類列表的協助,復制到上圖右方的 “formated” 下的20個分類子目錄;

          (2) 從 “formated” 的每一類圖像數據,分別切割出 train/val/test 三大分類,放到 “split” 目錄下,作為后面轉換成 tfrecords 的數據源。

          經過兩次轉換處理后,在這里的數據內容就該有 3 份相同圖像數據,只不過使用不同的路徑結構去存放而已。如果不想浪費存儲空間的話,可以將 VOCdeckit 與 formatted 兩個目錄刪除,只需要保留 split 目錄的結構就足夠。

          至于其他數據的轉換,也需要使用者對該數據集有充分的了解,畢竟學習數據轉換的精力要遠遠低于自行收集的時間,絕對是劃算的。


          2、物件檢測的 KITTI 格式:

          絕大部分通用數據集為了提高普及度,都提供多種應用類別的標注 (annotations) 內容,其中 “物件位置 (location)” 是最基本的數據,其他還有與人體相關的骨骼結構標注、語義分割的材質標注、場景描述的標注等等,每種數據集都有其側重點,因此內容種類與格式也都不盡相同,這是大伙要使用數據集的第一個門檻。

          物件檢測是比圖像分類更進一步的深度學習應用,要在一張圖像中找出符合條件的物件,數量沒有限定,就看訓練出來的模型具備哪些分類功能。

          每個數據集的差異,就是將所包含的圖像,都進行不同功能與不同細膩度的標注內容,這些動輒數萬張到上千萬張的圖像、分類數量從20到數千的不同數據集,也都使用不同的文件格式去儲存這些標注內容,有些是圖像文件與標注文件一一對應,有些則是將上千萬張的標注內容全部存在一個巨大的標注文件里。

          例如 COCO 數據集將數百萬張的標注存放在上百兆的 .json 文件里、 OpenImages 數據集上千萬張的標注存放在 1.3GB 的 .csv 文件中,而 Pascal VOC 與 ImageNet 的標注文件則提供一對一對應的 .txt 與 .xml 格式,莫衷一是。

          事實上對應物件檢測的應用,我們只需要標注文件中最基本的元素,包括“類別”與“位置”這兩組共 5 個欄位數據就可以。類別部分有的數據集直接使用“類別名”,有的數據集只提供“類別編號”,然后再到類別文件中尋找對應;位置信息部分,有些提供“左上角”與“右下角”坐標位置,有些使用“起點坐標”與“長寬”來表示,都是一組 4 個浮點值。

          因此,要從龐大的數據集中,提取我們所需要的類別與位置標注,就必須對個別標注結構進行研究,才能得到我們想要的結果,這個步驟是跳不過去的。網上雖然有很多標注格式轉換的功能,但是通用性受限制,還是需要進行局部修改。

          現在來看看 TAO 工具在物件檢測模型訓練所支持KITTI格式內容,主要欄位如下:

          其標注文件是.txt純文字格式,在文件內的表達方式如下:

          熟悉物件檢測應用的人,可能會覺得這個 KITTI 標注格式中,有一半以上的欄位是用不上的,為何英偉達卻十分偏好這個格式呢?

          如果將視野放大到自動駕駛與 3D 應用領域的話,就能理解英偉達選擇這個格式的理由,因為 KITTI 數據集是由德國卡爾斯魯厄理工學院和豐田美國技術研究院聯合創辦,是目前國際上最大的自動駕駛場景下的計算機視覺算法評測數據集。

          在物件檢測應用中只需要用到“類名”與“邊界框坐標”這兩部分,如果從其他數據集提取數據時只要找出這 5 個數據,如果坐標格式為“起點坐標+長寬”的格式,也能簡單轉換成“起點坐標+重點坐標”形式,寫入對應的 KITTI 標注文件中,其他欄位的內容 “補 0” 就可以,所以整個轉換過程還不是太麻煩。

          在 TAO 的視覺項目中的 face-mask-detection/data_utils 里,提供大約 4 轉換成 KITTI 格式的工具,能提供大家作為參考。

          只要能將不同數據集之間的格式轉換弄通,就能非常高效的從龐大的數據集資源中,輕松獲取我們所需要的類別數據,進一步訓練出自己專屬的模型,因此這個過程對使用深度學習的工程師是很重要的基本工作。

          iddler核心功能分區

          fiddler大致分為5 個區域,分別為菜單欄、工具欄、會話監控列表、輔助選項卡、狀態欄

          如圖

          菜單欄

          主要的功能其實很簡單主要又包含file(文件)、edit(編輯)、Rules(規則)、 Tools(工具) 、View(視圖) Help(幫助)

          file菜單主要包含新建視圖、加載一個保存好的抓包會話文件、保存所有會話列表數據到一個.saz文件中等等.

          edit菜單主要包含一些編輯的功能,例如對會話的:復制 粘貼 拷貝等操作

          Rules規則菜單所謂規則 指的也就是抓包的規則, 按照設置的一系列規則來顯示抓取的數據會話常見的勾選設置有:

          Hide CONNECTs(把建立通道連接隱藏了)的規則

          Hide 304s(也就是304相關的會話也隱藏了)的規則

          Hide image Request (也就是隱藏和圖片相關會話)的規則

          其他Rules規則菜單中的規則選項大家可以自行嘗試!

          Tools(工具菜單) 這個菜單多數是針對fiddler這款工具本身的一些網絡設置

          View(視圖菜單) 這個菜單是針對fiddler顯示界面與視圖的一些設置,如果有些工具欄和按鈕沒有顯示,就可以在這里來查找!

          Help(幫助菜單) 一些關于fiddler和網絡的幫助信息文檔,有興趣的可以去查查看!

          工具欄

          工具欄上的快捷按鈕,也是平常我們在抓包過程當中經常會使用到的,這里我列舉一些常會用到的工具按鈕

          add a comment(添加評論備注按鈕)

          使用這個工具按鈕你可以給某個會話添加一些描述或者備注信息!

          如圖

          Replay(重放請求按鈕)

          這個按鈕的作用其實就是,重新發出一次當前你所選擇的會話請求, 也就是說你點擊一下Replay就會通過Fiddler來幫你發一次請求到服務器去!

          也可以通過選擇一個會話之后點擊鍵盤上的R鍵進行快速重放操作!

          如圖

          如果你想一次性向某個會話發送n次請求, 那么可以先選擇一個會話,然后按住shift+R 或者 按住shift+Replay按鈕或者shift + u來輸入一個請求的次數!

          如圖

          這種操作可以對一些普通的基礎服務器做一個壓力測試, 也就相當于一個簡單的并發測試

          Remove session(刪除會話按鈕)

          刪除會話按鈕顧名思義就是用來刪除列表中的會話, 它這個按鈕內部包含了刪除會話的一些過濾方法

          比如:

          1.Remove All(刪除全部會話) 快捷鍵為ctrl+x

          2.images (刪除圖片相關的請求會話)

          3.connect (刪除連接相關的請求會話)

          4.Non-200s (刪除非200狀態的請求會話)

          5.Non-Browser(刪除非瀏覽器的請求會話)

          等等...

          當然刪除會話的方法還有很多,比如你在會話列表中選擇了某幾個會話想保留,其他會話全部刪除

          這種操作可以先按住ctrl然后選擇要保留的會話,然后再按下shift+delete即可!

          如圖

          當然也可以在會話列表中選擇某一個會話然后右鍵選擇Remove命令來進行刪除

          selected Session (刪除選擇的會話)

          Unselected Session (刪除未選擇的會話)

          All Session (刪除全部會話)

          如圖

          當然也可以直接點擊鍵盤上的delete來進行刪除會話!

          Decode(解碼按鈕)

          當把這個按鈕點擊上了之后,會對所有返回的請求會話進行解碼

          要知道http有的時候返回的正文內容是被編碼之后的,若要解碼全部會話中的響應報文可以先把這個按鈕點選上, 在抓包的時候響應報文就會自動解碼其中的正文內容!

          如圖

          當然你也可以不用點選這個按鈕,要解碼那個會話,再選擇會話的時候點擊右邊響應報文中的Response body is encoded click to decode(解碼響應報文) 就可以了!

          如圖

          Keep session (保持會話按鈕)

          這個按鈕的功能可以幫你規定會話列表中最多能夠保留多少個會話, 根據需求自己選擇就可以了!

          如圖

          Any Process(瞄準目標會話)

          這個功能有點意思, 可以瞄準你想要抓取的對象

          比如說: 我們現在要抓取一個ie瀏覽器的請求數據包, 那么可以以下操作

          如圖

          看到Process(進程)了吧, 都是瞄準的ie瀏覽器來進行抓取的請求!

          Find(會話查找按鈕)

          find按鈕就是用來進行搜索和查找會話的, 我們可以根據一些條件快速定位到想要的會話請求

          它對應的快捷鍵為ctrl+f

          如圖

          一些其他選項的含義如下表:

          選項

          描述

          Match case

          表示區分大小寫

          Regular Expression

          正則表達式

          Search binaries

          搜索二進制文件

          Decode compressed content

          解碼壓縮內容

          Search only selected sessions

          只搜索選擇的請求

          Result Highlight

          搜索結果強調顏色

          Save(會話保存按鈕)

          這個按鈕會把當前所有的會話全部以一個.saz的一個歸檔文件進行保存!

          這樣也方便發給其他的開發和測試人員觀看, 這沒什么好說的!

          照相機按鈕

          這個按鈕就是單純的截圖,截圖的時候會產生一個倒計時, 然后把截好的圖片通過本地發送請求到localhost, 也可以拷貝出來! 用處不是很大!

          如圖

          Browse (瀏覽器按鈕)

          這個按鈕的作用就是可以快速的打開當前電腦里已安裝的瀏覽器 沒什么太大特別的!

          Clear Cache(清除緩存按鈕)

          這個按鈕的作用就是清除緩存, 注意它是清除的ie瀏覽器的緩存

          TextWizard(按鈕)

          這個按鈕的功能可以讓文本進行編碼與解碼

          如圖

          會話列表 (Session list) 詳解

          會話列表 主要是fiddler所抓取到的每一條http請求都會顯示到這里!

          每一條所抓取到的信息我們稱之為一個session(會話),有編程基礎的朋友肯定馬上就能理解這個會話的含義

          會話列表中又包含了很多欄位,而每一個欄位都有其自己的含義,用來描述當前每一條會話的詳細信息!

          各個欄位的含義描述如下表:

          名稱

          描述

          #

          顯示抓取的請求id順序和類型圖標,id從1開始遞增

          Result

          HTTP響應結果狀態碼

          Protocol

          當前請求會話所使用的協議,如HTTP/HTTPS/FTP等等

          Host

          請求地址的主機名或域名

          URL

          從服務器請求資源的文件路徑,有的時候也包含GET請求的具體參數

          Body

          響應內容的大小, 單位為字節 也就是響應主體(Response Body)中的字節數

          Caching

          請求的緩存過期時間或者是對緩存的的控制相關描述 通常為Cache-Control響應頭中的值!

          Content-Type

          響應內容的類型,以及編碼類型

          Process

          發送此請求的程序與進程id:例如chrome:1604

          Comments

          允許用戶給請求會話添加備注文本信息

          Custom

          允許用戶設置使用腳本設置自定義字段

          ........................................


          如圖

          操作會話列表欄位

          首先在每一個欄位上面右鍵都會出現以下三個選項

          如圖

          1.Search this column (搜索此欄)

          意思是它會根據每一個欄位的特性來進行條件搜索此欄位, 這樣可以快速幫助用戶精準找到想要的數據信息!

          如圖

          2.Flag duplicates (重復會話標志)

          這個功能可以給我們的會話打上標志背景, 并且這個背景顏色標記的是當前列中存在重復的數據

          舉個例子吧: 例如我們在URL這一欄上右鍵選擇Flag duplicates 那么就會在當前列中存在重復URL的數據上打上一個綠色的背景

          如圖

          3.Hide this column (隱藏此列)

          這個沒什么說的 就是把當前這一列欄位給隱藏了!

          4.Ensure all columns are visible(確保所有列都可見)

          這個功能就相當于一個復位按鈕,如果你隱藏了某個欄位又不知道如何把它顯示出來,那么就直接點選它就可以全部欄位都復位!

          5.Costomize columns(自定義欄位)

          自定義欄位,是對所有列進行自定義, 其實也相當于新增一個欄位,而不是選擇的欄位

          添加欄位

          舉個例子 我們來給Fiddler添加一個IP顯示欄位

          fiddler默認是不顯示ip欄位的,那么我們可以直接點擊菜單欄中的Rules--->Customize Rules

          打開自定義規則對話框,這里其實應該說是會啟動Fiddler ScriptEditor(Fiddler的腳本編輯器)

          這里就是允許用戶通過腳本來添加或自定義列

          如圖

          然后我們按下鍵盤上的Ctrl+F查找關鍵字為static function Main()的字符串, 然后添加顯示IP欄位的相關代碼:

          代碼如下

          FiddlerObject.UI.lvSessions.AddBoundColumn("欄位名稱自定義", 120, "X-HostIP");

          如圖

          這樣一來在會話列表中就會顯示請求服務器的的IP地址了!

          如圖

          會話類型小圖標

          還有一點就是細心的朋友肯定發現在抓包的時候第一欄位除了顯示請求順序之外,還顯示了請求的文件類型圖標,也就是每個會話都標有一個對應的類型圖標

          如圖

          但是但通常不知道圖標代表著什么意思,這里我就來給大家挨個解釋一下:

          如下表

          icon

          含義

          正在將請求發送到服務器

          正在從服務器讀取響應

          請求在斷點處暫停

          響應在斷點處暫停

          請求使用HTTP HEAD方法;反應應該沒有身體

          請求使用的 HTTP POST 方法

          請求使用HTTP連接方法;這將建立用于 HTTPS 流量的隧道

          響應是 HTML

          響應是圖像

          響應是一個JS腳本

          響應是級聯樣式表

          響應為 XML

          響應為 JSON

          響應是音頻文件

          響應是視頻文件

          響應是一個 Silverlight 小程序

          響應是一個 Flash 小程序

          響應是字體

          通用成功響應

          響應是 HTTP/300,301,302,303 或 307 重定向

          響應為 HTTP/304:使用緩存版本

          響應是對客戶端憑據的請求

          響應是服務器錯誤

          會話被客戶端、Fiddler 或服務器中止。

          表示請求的格式為html格式





          請求會話的復制操作

          Fiddler中提供了很多對請求會話的復制操作,讓你更好的去獲取想要的數據!

          你可以在會話列表中選擇你要操作的會話, 然后右鍵選擇copy

          如圖

          其中子菜單含義如下表:

          菜單名稱

          描述

          Just URL

          復制請求的主機名+URL資源的路徑

          Terse Summary

          復制請求的方法+URL+響應狀態

          this Column

          復制當前請求中的本列信息

          Headers Only

          以格式化形式復制當前會話的請求報文和響應報文

          Session

          復制當前原始會話 跟Headers Only差不多

          Response DataURL

          以及base64編碼的形式復制響應數據的URL

          Full Summary

          復制當前會話信息對應的列

          根據需求進行選擇就可以了!

          請求會話的保存操作

          Fiddler對會話的存儲也制定了一些規則

          你可以在會話列表中選擇你要操作的會話, 然后右鍵選擇save

          其中save菜單下有四個選項

          1. Selected Session(選定的會話)
          2. Request(請求)
          3. Response(響應)
          4. ...and Open as local File(作為本地文件打開)

          Selected Session(選定的會話) 旗下子菜單選項如下

          如圖

          選項

          描述

          in ArchiveZIP

          把當前所選擇的請求會話保存到.saz文件中

          as Text

          把當前所選擇的請求會話保存到文本文件中 包含請求報文+響應報文+響應體

          as Text (Headers only)

          把當前所選擇的請求會話保存到文本文件中 包含請求報文+響應報文



          Request(請求)旗下子菜單選項如下

          選項

          描述

          Entire Request

          把當前所選擇的請求會話保存到文本文件中 只有請求報文

          Request Body

          保存當前請求會話請求正文文本文件



          Response(響應)子菜單如下:

          選項

          描述

          Entire Response

          把當前所選擇的請求會話保存到文本文件中 只有響應報文+響應體

          Response Body

          保存當前請求會話響應體文本文件



          ...and Open as local File(作為本地文件打開)

          這個選項的意思就是保存為本地的一個html文件 并且進行打開!

          保存會話亂碼問題

          我們有時候保存會話查看時,會發現返回的響應體是亂碼

          如圖

          遇到這種問題,主要是需要解碼就行了

          Inspectors 會話響應中點擊Response body is encodee.click to decode后,重新保存就沒亂碼了。

          也可以選中上圖會話框上的decode按鈕,這樣就自動解碼

          如圖

          其實如果你了解了http的基礎知識,那么會話列表中的欄位信息也會很快的理解!

          而你也不用每一個都去記住,要用的時候來查一查就行了!

          狀態欄

          狀態欄上又分為幾個小區域分別為:快速執行命令框(QuickExec)、

          快速執行命令框(QuickExec)

          這個輸入框的作用就是允許用戶快速輸入并啟動一些腳本命令!

          如圖

          一些關于QuickExec的鍵盤快捷鍵

          比如點擊 Alt+Q 可快速將焦點設置為快速執行命令框如果 Fiddler 未處于活動狀態,請先按Ctrl+ALT+F激活 Fiddler

          快速執行命令框中,按 Ctrl+I 會在快速執行命令框中插入當前所選會話 URL

          舉個例子

          我們可以在快速執行命令框輸入 clsclear命令來快速的清空會話列表

          如圖

          常見命令如下表

          命令

          對應欄位

          描述

          案例

          ?

          all

          問號后邊跟一個字符串,可以從會話列表中篩選出包含這個字符串的所有請求

          ?baidu

          >

          Body

          可以從會話列表中篩選出請求大小的會話,也就是大于這個數字請求

          >100

          <

          Body

          可以從會話列表中篩選出請求大小的會話,也就是小于這個數字請求

          <100

          =

          Result

          等于號后面跟數字,可以從會話列表中篩選出對應的HTTP狀態碼的會話

          =404

          @

          Host

          @后面跟Host,可以從會話列表中篩選出相應的域名

          @www.baidu.com

          select

          Content-Type

          select后面跟響應類型,可以從會話列表中篩選出相關的會話類型

          select image

          cls

          All

          清空當前所有請求

          cls

          dump

          All

          將所有請求打包成.saz壓縮包,默認會保存到C:\Users\用戶名\Documents\Fiddler2\Captures目錄下

          dump

          start

          All

          開始監聽請求

          start

          stop

          All

          停止監聽請求

          stop









          ..............

          ..................................


          .................

          更多命令 可以查看官方文檔, 這里就不再過多贅述了,關于快速執行命令框后面的斷點中還會用到!

          all processes (進程篩選)

          All Processes可以對抓包進行篩選,可以根據自己情況選擇。

          如圖

          也就是說在抓包的時候,是顯示所有會話進程還是瀏覽器請求的會話進程 還是不是瀏覽器請求的會話進程 或者全部隱藏,根據自己的需求進行選擇就行了!

          空白小區域

          這個小區域,如果你用鼠標點擊一下就會出現斷點的設置

          如圖

          狀態

          描述

          意思就是請求之前斷點, 也就是當這個狀態啟動的時候,那么你發送的請求就會卡在這里!

          響應在斷點處暫停, 也就是說服務器已經返回請求的數據了,但是被Fiddler在中間卡住了,還沒有到客戶端這一邊!

          ...........


          關于斷點我會后面會詳細講到!

          狀態欄的其他地方就是顯示當前會話的數量以及當選所選擇會話URL地址


          Fiddler輔助標簽工具欄 詳解

          Fiddler中輔助標簽工具欄算是用得比較多的,因為經常要在這里查看抓取數據包的詳細信息!

          接下來我就詳細拆分輔助標簽工具欄的各個區域來講解!

          Statistics 性能統計

          用于查看請求的性能數據,統計與分析, 也就是說它就是對當前請求的性能分析數據

          當你點擊一個HTTP請求會話的時候,就可以看到Statistics里面有關于當前HTTP請求的性能以及數據分析!

          例如: 一些TCP/IP的連接時間,DNS的解析時間、資源消耗、各個國家的請求網絡帶寬對比等信息

          如圖

          如果你是一個專業的前端開發者,這些數據就應該重點關注一下!

          Inspectors 請求與響應數據查看

          你有沒有想過在Fiddler中如何快速查看http請求與響應報文呢?

          其實當我們在會話列表中雙擊某一個會話請求就會自動跳轉到Inspectors選項卡

          也就是當抓包成功之后, 就可以在左側窗口中選擇你要查看的地址來進行查看抓取的http信息數據, 當選擇了相應的地址之后,在右側選項卡中 選擇Inspectors(檢查器), 然后再點擊一下Raw就可以按照原生形式來進行查看到相應的http請求報文http響應報文, 分為上下兩個部分,上半部分是請求頭部分,下半部分是響應頭部分

          如圖

          對于每一部分,提供了多種不同格式查看每個請求和響應的內容, Inspectors選項卡中還有其他的

          Inspectors選項卡上半部分HTTP請求內容的子集選項卡如下表

          名稱

          含義

          Headers

          以層級的形式來顯示HTTP請求頭部的相關內容信息

          TextView

          以文本的形式展示

          SytaxView

          查看具體的請求體 或者附帶的鍵與值

          WebForms

          可以通過它看到url提交的相關參數信息

          HexView

          以16進制進行查看請求!

          Auth

          查看請求數據權限

          Cookie

          查看請求cookie信息

          Raw

          原生查看http

          JSON

          JSON格式展開查看請求信息!

          XML

          xml格式展開查看請求信息!



          Inspectors選項卡下半部分HTTP響應內容 的子集選項卡如下表

          名稱

          含義

          Transformer


          Headers

          層級方式來展示HTTP響應頭部信息

          TextView

          文本方式來展示HTTP響應正文信息

          SyntaxView

          語法高亮來展示HTTP響應正文信息

          ImageView

          圖片的形式來展示響應信息, 前提是你選擇的會話是一個圖片響應

          HexView

          16進制來查看響應信息

          Webview

          html編譯顯示之后的形式來查看響應結果

          Auth

          查看響應權限

          Caching

          查看響應緩存相關信息

          cookie

          查看響應cookie信息

          Raw

          原生格式展示響應信息

          JSON

          json展示響應信息

          xml

          xml展示響應信息

          AutoResponder 自動攔截請求

          AutoResponder也叫做自動響應器

          它允許你攔截指定規則的請求,并把響應結果重定向到一個本地資源 或 直接使用Fiddler內置的資源,從而代替服務器來自定義一個你想要的響應。 說白一點就是篡改響應

          這個功能在我們做開發測試的時候也是非常有用的 ,使用它我們可以不影響用戶體驗的前提下進行測試!

          舉個例子 當我們請求百度頁面的時候, 抓取到其中一個百度logo圖片會話,最后把這個圖片會話響應給替換成其他資源!

          首先我們可以在Fiddler中的Inspectors結合會話列表找到這個圖片的連接資源URL地址: 可能有多個

          例如

          然后切換到AutoResponder選項卡, 在Rule Editor規則編輯中填入要請求的資源地址替換成的響應,最后點擊save保存一下, 就可以了!

          溫馨提醒 最好要把以下這3個復選框勾上!

          Enable Rules(啟用規則)

          Accept all connects(接受所有連接)

          Unmatched requests passthrough(不匹配的請求傳遞)

          如圖

          那么下一次你再次請求百度頁面的時候,如果再次遇見到這個百度logo圖片的資源地址,那么請求就會被中間層的Fiddler劫持篡改成為我們設置的某個響應資源,并返回給客戶端, 明白了吧, 這個響應不是從服務器回來的,而是我們人為篡改的!

          注意測試的時候,最好使用去緩存刷新來測試, 瀏覽器快捷鍵shift+F5

          效果如圖

          Fiddler其實還有很多內置的響應規則,根據實際情況和需求來決定如何測試

          如圖

          我們還可以自定義編輯響應也就是Edit Response

          舉個例子 我們可以直接編輯服務器返回響應信息的詳細內容,然后再返回給客戶端

          如圖

          效果如下

          響應都可以隨便篡改 Fiddler還有什么事情不能做的!

          總之通過這種中間截獲的手段并篡改響應資源的手法就可以實現很多資源響應的修改,你也可以修改html、css、js等資源都是可以的 ,這極大方便了我們做開發模擬請求和響應測試!


          Composer 設計請求發送到服務器

          它可以允許我們自定義請求報文來發送到服務端,當然也可以手動創建一個新的請求,也可以從會話列表中拖拽一個現有的請求去發送!

          Parsed(解析模式)下我們只需要提供簡單的URL地址就可以了, 并且還可以在RequestBody中去定制一些屬性,例如模擬瀏覽器消息頭User-Agent

          但是Composer通常在我們開發項目當中用于接口測試 也是經常用于測試一些api接口的最好方法!

          當然有時候也可以通過Composer來校驗后端接口的嚴謹,從而跳過一些前端的限制,去直接訪問后端代碼的邏輯!

          Composer下還有幾個子集選項卡:Parsed、Raw、Scratchpad、Options

          具體解釋如下表:

          選項卡

          描述

          Parsed

          表示已經被解析的整個HTTP請求,包括請求行,請求頭和請求體,說通俗一點也就是最直觀的看到Request請求的詳細展示

          Raw

          按照真實原生HTTP請求標準來進行展示的格式!

          Scratchpad

          可以存儲已經收集好的HTTP請求,可存儲多個不同的請求, 你可以理解為請求回放功能, 鼠標連續點擊三次即可選中要選擇的請求來進行發送!

          Options

          設置一些請求選項



          其中options中的設置項如下表:

          名稱

          描述

          Inspect Session

          檢查會話,當開啟此功能并重放的時候,會自動跳入Inspectors功能模塊,進行檢查HTTP請求和響應。

          Fix Content-Length header

          當使用POST請求進行重放的時候,如果沒有Content-Length的請求頭,Fiddler會自動加上此請求頭,如果有但是請求正文大小錯誤,則它會自動修正。默認勾選。

          Follow Redirects

          會自動重定向301,302的請求。

          Automatically Authenticate

          自動進行身份認證,包括認證NTLM,http 401,http 407

          UI Options

          此功能是在原有的Fiddler功能選項里面,將Composer這個功能彈出一個浮動窗口,如果不需要直接關閉這個窗口就會恢復原樣。



          ..................................................


          我們用得最多的也就是Parsed(詳細展示請求結構)

          如圖

          舉個例子 我們用圖靈機器人來測試一個POST請求的智能聊天對話接口!

          圖靈機器人接口信息

          接口信息

          描述

          http://openapi.turingapi.com/openapi/api/v2

          接口地址

          請求方式

          HTTP POST

          請求參數

          請求參數格式為 JSON

          參數格式

          {
              "perception": {
                  "inputText": {
                      "text": "聊天文字"
                  },
              },
              "userInfo": {
                  "apiKey": "申請的key",
                  "userId": "隨機32位字符串"
              }
          }

          文檔說明 https://www.kancloud.cn/turing/www-tuling123-com/718227

          操作流程

          那么使用Fiddler調試一個POST請求并帶有json格式的數據,我們可以打開Composer面板, 在Composer面板中的第一個下拉框中選擇POST請求方式,然后輸入請求接口的地址!

          Request Headers中也可以輸入一些請求頭信息,也可以不輸入,它會幫你自動生成

          然后在Request Body中輸入請求的JSON數據

          最后點擊Execute(執行),若在會話列表中看到結果返回200表示操作成功!

          如圖

          這個時候,我們就可以在Inspectors里面查看到請求響應的結果了!

          如圖

          如果返回的JSON數據格式不清楚,其實你可以拿到一些數據格式化網站上去格式化一下就可以了

          如圖

          再舉個例子 我們再請求一個GET請求

          如圖

          這樣就可以返回數據了!

          以上這些都是測試的第三方接口,如果是你自己寫的api接口也是可以這樣子來測試的!

          總而言之:Composer可以幫助你去發送數據包,幫助你去做一些接口測試,幫助你去做一些平常沒辦法做到的一些測試!??


          Filters 請求過濾器

          Filters本意就是過濾的意思, 它的主要作用就是用來過濾請求用的, 要知道有的時候 會話列表中或存在大量的請求會話, 那么有些時候會根據用戶條件進行一個會話篩選, 也就是說通過過濾規則來過濾掉那些不想看到的請求!

          Filters選項卡也是在我們抓包過程中使用頻率非常高的,其中功能也比較多,這里我把它內部的功能逐一拆解分成7個部分來進行講解!

          如圖

          1.Hosts 這是Filters對主機的過濾規則設置!

          如圖

          我們使用Filters的時候就必須要勾選左上角的Use Filters(選擇過濾器)開啟過濾器, 勾選了之后Filters選項卡會出現綠色對鉤, 記住這個勾選之后,過濾器才會生效

          并且這里還有兩個請求過濾條件:Zone和Host

          Zone(區域): 下拉列表中可以選擇如下:

          show only Intranet Hosts(只顯示局域網的請求)

          show only Internet Hosts(只顯示廣域網的請求)

          如圖

          那么這到底代表什么意思呢?

          舉個例子 我們來請求baidu試試!

          如圖

          如果設置為了show only Intranet Hosts 那么外網的請求會話是無法獲取到的,智能獲取內網請求

          如果設置為了show only Internet Hosts那么相反也智能獲取外網的請求,而內網的請求是無法獲取到的!

          平常如果我們沒有其他特殊需求的情況下Zone都被默認設置為了No Zone Filter(不用區域過濾)

          注意:各位要留意 Intranet(內網) 和 Internet(因特網) 這兩個單詞很多人容易搞混!

          Host(主機):下拉列表中可以選擇如下:

          如圖

          含義解釋:

          Hide the following Hosts(隱藏下列指定的主機的請求)

          show only the following Hosts (僅顯示以下指定主機的請求)

          Flag the following Hosts(標記以下主機)

          舉個例子 比如說: 我設置其中一個show only the following Hosts (僅展示以下指定主機的請求) 那么會話列表中只會出現我所指定的主機請求會話,其他一概不顯示!

          注意: 這里設置之后 要點擊一下Actions中的Run Filterset now(運行過濾)

          如圖

          另外兩個根據自己需求設置就行了, 平常沒特殊需求我們也是設置的No Host Filter

          2.Client Process 這是對客戶端進程的一些過濾設置!

          如圖

          其中有三個復選框:

          show only traffic from (僅顯示當前客戶端指定進程的請求)

          show only Internet Explorer traffic (僅顯示Internet Explorer請求)

          Hide trafficfrom Service Host (對服務主機隱藏請求)

          舉個例子 我僅顯示ie瀏覽器的請求會話,其他瀏覽器的請求會話一概不顯示!

          如圖

          看到了吧,這對某一些需求上還是有一定幫助的!

          3.Request Headers 這是對請求頭的一些過濾規則

          如圖

          其中有幾個復選框功能如下表:

          名稱

          描述

          show only if URL contains

          僅展示當前URL中包含指定內容的請求會話

          Hide if URL contains

          隱藏當前URL中包含指定內容的請求會話

          Flag request with headers

          用頭標記請求, 標記帶有特定header的請求,如果在web session列表中存在該請求,會加粗顯示。 例如,我想突出顯示header信息中帶有token字段的URL請求,即可以勾選上這項,并在后面輸入:token。

          Delete request headers

          刪除請求頭, 也就是說在請求的過程當中會刪除指定的Header字段。我們在進行測試時非常有用,比如說去掉URL中的Content-Type信息

          set request header

          設置請求頭, 也就是說可以在請求頭中自定義請求頭信息,前面輸入字段,后面輸入值, 這就是我們可以進行自定義請求頭內容

          .....................................................................


          舉個例子

          例如: 勾選show only if URL contains只會顯示指定包含這個內容的 響應會話

          如圖

          例如: 勾選set request header然后我們自定義一個header頭信息 然后去發送一個請求

          如圖

          然后我們可以在Inspectors中查看到請求頭就有我們所自定義頭信息了, 有的時候做一些特殊調試還是能夠起很大幫助的!

          如圖

          4.Breakpionts 斷點設置

          這個功能有的時候也非常重要!

          功能解釋如下表:

          功能

          描述

          Break request on Post

          針對所有POST請求設置斷點。

          Break request on GET with query string

          給所有帶參數的 GET 請求設置斷點

          Break on XMLHttpRequest

          針對所有Ajax請求設置斷點。

          Break response on Content-type

          針對響應報文中header字段中,Content-Type屬性匹配成功的請求設置斷點

          ..............................................................................................


          關于請求斷點后面單獨拿一章節來說!

          5.Response Status Code(請求狀態碼過濾)

          這一部分的功能,很簡單就是看狀態碼進行會話的過濾

          如圖

          功能解釋如下表:

          功能

          描述

          Hide success(2xx)

          隱藏響應狀態碼為2xx的URL請求,如:響應狀態碼為200的URL請求將隱藏掉

          Hide non-2xx

          隱藏響應狀態碼不是2xx的URL請求。

          Hide Authentication demands(401,407)

          隱藏認證(響應狀態碼為:401 407)的URL 請求。這些響應需要用戶進一步確認證書,authentication demands是認證需求的意思。

          Hide redirects(300,301,302,303,307)

          隱藏重定向(響應狀態碼為:300,301,302,303,07)的URL請求。

          Hide Not Modifield(304)

          隱藏不是緩存的狀態碼(304)的URL請求, 因為304是請求的資源從上次起沒有發生變更返回的狀態碼。

          .............................................................................................


          舉個例子

          我們勾選Hide success(2xx) 返回的請求會話中是不會包含2xx狀態碼的請求

          6.Response Type and Size (根據響應類型和大小進行過濾)

          如圖

          Show all Content-Type 這一項比較常用, 意思為顯示所有指定Content-Type類型的請求

          其中的選項描述如下表:

          功能

          描述

          Show only IMAGE/*

          僅顯示響應類型為圖片的請求, 即響應header中Content-Type=IMAGE/的請求,*為通配符

          Show only HTML

          僅顯示響應類型為HTML的請求。

          Show only TEXT/CSS

          僅顯示響應類型為text/css的請求。

          Show only SCRIPTS

          僅顯示響應類型為Scripts的請求

          Show only XML

          僅顯示響應類型為XML的請求。

          Show only JSON

          僅顯示響應類型為json的請求。

          Hide IMAGE/*

          隱藏所有響應類型為圖片的請求。



          ..............................................


          其他功能項如下表

          功能

          描述

          Hide smaller than

          隱藏小于指定大小響應結果的請求,大小可以在 Inpsectors 中響應結果部分的 Transformer 中查看

          Hide larger than

          隱藏大于指定大小響應結果的請求

          Time HeatMap

          時間的熱圖。

          Block script files

          阻止返回正常JS文件。如果響應是腳本文件,那么響應 404。

          Block image files

          阻止返回正常圖片文件。如果響應是圖片文件,那么響應 404

          Block SWF files

          阻止返回正常SWF文件。如果響應是SWF 文件,那么響應 404。 科普一下swf(shock wave flash):是Macromedia公司的目前已被adobe公司收購)公司的動畫設計軟件Flash的專用格式

          Block CSS files

          阻止返回正常CSS文件。如果響應是 CSS 文件,那么響應 404

          ..............................................


          舉個例子 比如我們禁止掉頁面上的css js 等資源看看請求的結果是什么樣子的!

          如圖

          效果

          那么此時請求的頁面將會失去css 、js、圖片等資源, 讓他們都響應為404狀態

          以上這些功能可以測試一些資源等加載失敗的情況下頁面的展示情況, 前端必備哦!

          7.Response Header (根據響應頭信息進行過濾)

          如圖

          功能詳解如下表:

          功能

          描述

          Flag responses that set cookies

          會話列表的響應中有cookies信息的加上標識斜體

          Flag responses with headers

          會話列表里標記響應中帶有特定header的請求 即加粗。

          Delete response headers

          會話列表里刪除響應信息中,就是說沒有發給客戶端之前就把這些響應頭刪除掉!

          Set response header

          在響應中添加header字段, 也就是自定義響應頭信息,再發給客戶端

          ............................................................................


          小結 有些新手朋友在使用Fiddler的時候出現抓包失靈的情況,可能就是你在Filters選項卡中勾選了什么東西才導致的! 所以使用過濾器要注意一下!


          Fiddler 斷點(breakpoints)實戰

          所謂斷點功能就是將你的請求或者響應截獲下來,但是不發送也不返回,都放到Fiddler這里, 這個時候你可以做很多事情,比如說,把請求報文改了,或 響應報文改了,再發送給服務器 或 客戶端

          請求之前執行斷點

          還記得前面狀態欄說過的小空白區域嗎? 點擊這個區域就會出現斷點標志符號,如下表:

          狀態

          描述

          意思就是請求之前斷點, 也就是當這個狀態啟動的時候,那么你發送的請求就會卡在這里!

          ...........


          以上狀態圖標其實對應的也就是菜單欄中的Rules--->Automatic Breakpoints--->Before Request

          如圖

          舉個例子

          我們請求某個網站之前就先把這個斷點打開, 那么在請求的時候, 會話列表中所對應的請求也會呈現斷點狀態的圖標, 會話列表中URL所對應的網站也是無法顯示出來的, 因為此時此刻請求還未發到服務器。中間被Fiddler所截獲 ,那么現在就可以做一些數據和請求信息上的修改

          然后等確定要發送到服務器的時候就點擊Run to Completion(完成) 把這一個請求發送到服務器端就可以了 !

          如圖

          注意 點擊Run to Completion(完成) 只是把當前所選擇到的會話解除斷點,讓它發送到服務器端,從而響應

          響應之前執行斷點

          狀態

          描述

          [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LaOqoiWK-1651910920401)(img/Icon_4.png)]

          響應在斷點處暫停, 也就是說服務器已經返回請求的數據了,但是被Fiddler在中間卡住了,還沒有到客戶端這一邊, 所以當我們開啟了這個狀態,那么在響應之前就會卡主!

          .............


          當我們再次點擊一下的時候就會切換到以上狀態圖標

          其實對應的也就是菜單欄中的Rules--->Automatic Breakpoints--->After Request

          After Request(請求之后斷點)Before Request(請求之前斷點)正好相反

          如圖

          舉個例子

          還是請求某個網站之前就先把這個請求后斷點打開, 那么此時響應信息已經返回了,但是被的時候Fiddler卡主了, 會話列表中所對應的請求也會呈現請求后斷點的圖標, 會話列表中URL所對應的網站也是無法顯示 或者 無法提取最新的頁面信息, 因為此時此刻響應還未發到客戶端。返回途中被Fiddler所截獲

          那么如果可以的話,現在就能做一些響應報文信息上的修改

          然后等確定要發送到客戶端的時候就點擊Run to Completion(完成) 把這一個響應發送到客戶端就可以了 !

          如圖

          所以在Fiddler拿到響應信息的時候,先住,然后篡改一些信息之后再發給客戶端!

          命令斷點

          大家還記得狀態欄上的快速命令執行框嗎? 在這里也可以輸入來執行一些命令斷點

          如圖

          那么一些常見的斷點命令如下表:

          命令

          描述

          案例

          解除斷點

          bpafter

          bpafter后邊跟一個字符串,表示中斷所有包含該字符串的請求

          bpafter baidu

          輸入bpafter解除斷點

          bpu

          bpafter功能差不多,

          bpu baidu

          輸入bpu解除斷點

          bpv

          只中斷HTTP方法的命令,HTTP方法如POST、GET

          bpv get

          輸入bpv解除斷點

          bpm

          只中斷HTTP方法的命令,HTTP方法如POST、GET

          bpm get

          輸入bpm解除斷點

          go

          放行中斷下來的請求,相當于工具欄上的go按鈕

          go




          ...................................

          .........................................

          Fiddler 弱網測試

          什么是弱網?

          弱網Fiddler中就是設置網絡限速 簡單理解也就是在網絡不好 或者 網絡環境復雜、使用場景多變異常、網絡抖動、延時、丟包的環境下進行檢查的一種方式 就叫弱網測試

          舉個例子

          一款適配于低資源環境的醫療it系統項目來說,而它的使用場景主要是在一些2G網絡環境下,3G網都很少,并且穩定性也是比較差。因此這款網站應用app應用要想完成交付,就一定要在弱網狀態甚至在沒有網絡狀態下運行, 看看是不是能夠正常交付!

          所以我們要模擬一個弱網環境進行測試 通過Fiddler軟件方式利用模擬網絡參數來配置弱網環境,就可以達到對帶寬、丟包、延時等進行模擬弱網環境目的

          windows環境下我們通常可以使用fiddlernetwork emulator for windows toolkit來模擬

          mac環境下則可以使用CharlesXcode自帶的開發環境網絡異常模擬工具進行測試

          Timeline 請求響應時間

          在左側的會話列表窗口選擇一個或多個會話,再切換到Timeline選項卡中 便會顯示指定的資源從服務端傳輸到客戶端的響應時間!

          如圖

          從上圖來看 似乎都屬于正常的網絡延遲范圍之內吧!

          那么我們現在就利用Fiddler這個軟件來設置一下網絡延遲,讓網絡限速

          方法也很簡單從Fiddler的菜單欄上選擇Rules---->Performance--->Simulate Modem Speeds(模擬調制解調器速度)就可以了!

          如圖

          當我們勾選了Simulate Modem Speeds(模擬調制解調器速度) 之后你在測試一下請求某個網頁看看響應時間就知道了!

          如圖

          看到了吧 很明顯某些資源請求的時長增加了!

          Fiddler 腳本限速

          那么到底Fiddler給我們限制了多少網速呢 ?

          其實我們可以通過腳本去查看和設置,在Fiddler菜單欄選擇Rules--->Customize Rules(自定義規則)

          打開Fiddler ScriptEditor編輯器,然后按下Ctrl+ F來搜索關鍵字Simulate(模擬的意思) 找到if判斷的m_SimulateModem變量

          如圖

          以上的代碼中寫明了注釋:

          Delay sends by 300ms per KB uploaded意思是每上傳1KB延遲發送 要花費300毫秒

          Delay receives by 150ms per KB downloaded意思是延遲每下載1KB接收要花費150毫秒

          要知道這里的單位是毫秒1秒=1000毫秒 那么知道了這個之后,我們就可以手動的來設置網絡延遲了!

          如圖

          也就是說我現在發一個請求上傳也要1.3秒,并且每一個資源的下載時間也要1.5秒

          設置之后保存即可! 就可以再去Timeline中查看一下請求會話的響應時間了!

          注意: Simulate Modem Speeds(模擬調制解調器速度) 依舊要為勾選狀態!

          如圖

          是不是比剛才很卡了呢!

          小結

          總之弱網測試的目的就是盡可能保證用戶體驗, 也就是說我們的項目或頁面的數據響應時間是否可以被用戶所接受, 常見的一些關注點包含如下:

          1. 熱啟動和冷啟動時間、頁面切換、前后臺切換、首字時間,首屏時間等。
          2. 頁面呈現是否完成一致。
          3. 超時是否符合定義,異常信息是否顯示正常。
          4. 是否有超時重連。
          5. 安全角度:是否會發生dns劫持、登陸ip更換頻繁、單點登陸異常等。
          6. 大流量事件風險:是否會在弱網下進行更新apk包、下載文件等大流量動作。
          7. 是否會有頁面的crash以及顯示的錯亂、session是否一致、請求堆積處理等
          8. 登錄、單局、支付等 不能有導致項目無法正常進行UI顯示、交互問題
          9. 不能有損害用戶利益 或者 可被用戶額外獲利的問題
          10. 需要有合理的斷線重連機制,避免每次重連都返回到登錄界面等等..

          補充擴展

          當然這里要多說一句 軟件模擬弱網方式是由一定的弊端的,因為不是非常接近弱網絡環境,想要更接近弱網環境,例如大多數專業項目的測試2G/3G/4G、高延時、高丟包、響應時間、頁面呈現&超時文案&超時重連、安全及大流量風險、無網多狀態切換等會更傾向于通過硬件方式來協助測試,但這種方式又會變得很麻煩,都是通過樹莓派 但是軟件方式的成本低且實施起來容易操作而已!



          "點贊" "評論" "收藏"

          大家的支持就是我堅持創作下去的動力!?


          ?如果以上內容有任何錯誤或者不準確的地方,歡迎在下面 留個言指出、或者你有更好的想法,歡迎一起交流學習?


          主站蜘蛛池模板: 久久久不卡国产精品一区二区| 国产激情精品一区二区三区| 波多野结衣免费一区视频| 国产一区二区三区在线2021| 亚洲AV无码一区二区三区牲色| 国产一区二区三区91| 美女AV一区二区三区| 亚洲欧美成人一区二区三区| 日韩电影一区二区三区| 一区在线观看视频| 日本强伦姧人妻一区二区| 海角国精产品一区一区三区糖心| 亚洲Av无码一区二区二三区| 日韩精品在线一区二区| 国产亚洲一区二区三区在线| 精品乱子伦一区二区三区高清免费播放| 天天视频一区二区三区| 亚洲丰满熟女一区二区哦| 一区二区和激情视频| 少妇一夜三次一区二区| 在线欧美精品一区二区三区| tom影院亚洲国产一区二区| 精品国产乱子伦一区二区三区 | 亚洲精品伦理熟女国产一区二区| 人妻无码一区二区三区AV| 久久久91精品国产一区二区| 91video国产一区| 亚洲国产成人精品无码一区二区| 亚洲av无码片区一区二区三区| 亚洲欧洲日韩国产一区二区三区| 少妇无码一区二区三区| 国产乱人伦精品一区二区 | 国产精品高清一区二区人妖| 亚洲Av高清一区二区三区| 精品少妇ay一区二区三区| 成人国产精品一区二区网站公司| 国产精品一区二区三区高清在线 | 国产手机精品一区二区| 在线成人综合色一区| 午夜无码视频一区二区三区| 国产在线精品一区二区不卡麻豆|