日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Fiddler篇】FreeHttp无限篡改http报文数据调试和mock服务

發(fā)布時(shí)間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Fiddler篇】FreeHttp无限篡改http报文数据调试和mock服务 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 引言
    • FreeHttp起源
    • ?FreeHttp 插件安裝
    • FreeHttp 基本界面
  • 一:規(guī)則匹配區(qū)
    • 1.1:『get http sesion in left session list』獲取Session信息
    • 1.2:『select url filter method』Url匹配方式
    • 1.3:『edit advanced http filter』高級(jí)匹配
    • 1.4:『new or edit rule』創(chuàng)建規(guī)則
  • 二:請(qǐng)求或響應(yīng)篡改規(guī)則編輯區(qū)域
    • 2.1:『Request Modific』請(qǐng)求修改
    • 2.2:『Request Replace』請(qǐng)求替換
    • 2.3:『Response Modific』響應(yīng)修改
    • 2.4:『Response Replace』響應(yīng)替換
  • 三:規(guī)則編輯控制條及常規(guī)設(shè)置編輯區(qū)域
    • 3.1『affirm rule』確認(rèn)創(chuàng)建規(guī)則或保存規(guī)則修改
    • 3.2『cancel edit』取消
    • 3.3『set response latency』 設(shè)置響應(yīng)延時(shí)
    • 3.4『set parameter pick info』設(shè)置參數(shù)化數(shù)據(jù)獲取規(guī)則
    • 3.5『Quick Rule』快速規(guī)則
    • 3.6『Modific Tool』篡改工具及常規(guī)設(shè)置
  • 四:『Execution Log』執(zhí)行日志
  • 五:『Tamper Rule』篡改規(guī)則列表
    • 5.1 Tamper Rule控制選項(xiàng)
    • 5.2 Tamper Rule信息顯示
    • 5.3 Rule的編輯及排序
  • 六:快速入門
  • 七:簡單實(shí)踐
  • 八:參數(shù)化數(shù)據(jù)設(shè)置
    • 8.1 『parameter data manage』參數(shù)化數(shù)據(jù)管理器
    • 8.2 在規(guī)則中使用參數(shù)化數(shù)據(jù)
    • 8.3 動(dòng)態(tài)拾取參數(shù)化數(shù)據(jù)
    • 8.4 參數(shù)化數(shù)據(jù)示例
  • 實(shí)現(xiàn)及源碼

?


引言

FreeHttp是一個(gè)Fiddler插件借助FreeHttp您可按照您自己的設(shè)定修改請(qǐng)求或響應(yīng)報(bào)文,這對(duì)測(cè)試及調(diào)試都非常有用

比如您發(fā)現(xiàn)線上頁面js文件錯(cuò)誤,直接使用規(guī)則替換新的js文件您可以在不對(duì)線上服務(wù)做任何改動(dòng)的情況下直接在線上驗(yàn)證

同樣在發(fā)現(xiàn)服務(wù)接口數(shù)據(jù)不符合預(yù)期時(shí)也可以直接修改驗(yàn)證,甚至可以清除手機(jī)瀏覽器或微信服務(wù)號(hào)的登陸狀態(tài)

希望在您了解其基本功能及工作原理后,可以在實(shí)際工作中為您提供便利

?

FreeHttp起源

如今互聯(lián)網(wǎng)或IT行業(yè)幾乎跟HTTP已經(jīng)分不開了,系統(tǒng)與系統(tǒng)之間的聯(lián)系相當(dāng)一部分都需要借助HTTP,在平時(shí)的工作中(特別是測(cè)試工作)漸漸的會(huì)發(fā)現(xiàn)自己除了對(duì)抓取HTTP報(bào)文有需求,很多時(shí)候更需要篡改HTTP報(bào)文輔助測(cè)試或調(diào)試。

Fiddler實(shí)際已經(jīng)提供斷點(diǎn),AutoResponder及FiddlerScript 功能可以直接或間接實(shí)現(xiàn)報(bào)文篡改功能,不過使用過程中會(huì)發(fā)現(xiàn),他們?cè)诤芏嗲闆r下操作難度較大限制也多,甚至有些情況達(dá)不到我的需求。

為了滿足自己的一些特定需求,借助Fiddler擴(kuò)展接口自己慢慢為其編寫開發(fā)了插件,后來隨著工作需要為插件添加的功能越來越多,自己就萌生了把功能實(shí)現(xiàn)成通用的形式或許可以給其他同學(xué)提供幫助(也就成為了FreeHttp的雛形)

之后利用業(yè)余時(shí)間逐步整理實(shí)現(xiàn)了當(dāng)前版本的功能,由于時(shí)間以及水平方面的限制,相信FreeHttp依然存在許多缺陷及不足的地方,也希望大家能多包涵。發(fā)現(xiàn)問題可以直接提出,我會(huì)盡快修復(fù),希望能為大家的工作提供便利。

?

?

FreeHttp篡改http報(bào)文的基本實(shí)現(xiàn)過程如上圖(綠線代表http請(qǐng)求,黃線代表http響應(yīng))

FreeHttp獲取請(qǐng)求及響應(yīng)需要依賴fiddler代理,也就是說只要連接fiddler代理的終端設(shè)備的http請(qǐng)求報(bào)文都可以被FreeHttp篡改,同樣支持對(duì)https的篡改(當(dāng)遇到http2.0請(qǐng)求時(shí)會(huì)先降級(jí)到http1.1,再進(jìn)行報(bào)文篡改)

FreeHttp 插件安裝

1:您的計(jì)算機(jī)需要已經(jīng)安裝Fiddler?(如未安裝,請(qǐng)至官網(wǎng)下載安裝?http://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler)

2:進(jìn)入Fiddler安裝目錄的Scripts目錄下,將FreeHttp.dll復(fù)制到該目錄下即可? (文件下載請(qǐng)至:https://files.cnblogs.com/files/lulianqi/FreeHttp1.2.zip? 或?http://lulianqi.com/file/FreeHttp1.2.zip? ?解壓可得到?FreeHttp.dll? )

3:重啟Fiddler即可在面板中出現(xiàn)?FreeHttp?標(biāo)簽

?

?

備注:??由于本文篇幅較長,如果您當(dāng)前時(shí)間不充裕或暫時(shí)不打算查看 FreeHttp的詳細(xì)功能,建議您直接閱讀第6章節(jié)【六:快速入門】,第7章節(jié)【七:簡單實(shí)踐】(這2章節(jié)有可以幫您快速了解FreeHttp的基本功能)

? ? ? ? ? ? 如果您對(duì)FreeHttp的代碼實(shí)現(xiàn)感興趣,或您打算修改FreeHttp的功能,您可以在末尾章節(jié)【實(shí)現(xiàn)及源碼】找到相關(guān)內(nèi)容(源代碼地址及工程結(jié)構(gòu)簡介)

?

FreeHttp 基本界面

基本操作界面如下圖,主要分為5個(gè)部分

  • Session 匹配規(guī)則編輯區(qū)『Url Filter』
  • Htpp 請(qǐng)求或響應(yīng)篡改規(guī)則編輯區(qū)
  • 規(guī)則編輯控制條
  • http session 捕獲/篡改或規(guī)則執(zhí)行日志
  • 已創(chuàng)建http篡改規(guī)則列表
  • ? ? ? ? ?當(dāng)請(qǐng)求發(fā)出或接收到響應(yīng)時(shí),freehttp會(huì)在篡改規(guī)則列表中匹配篡改規(guī)則(匹配使用Url Filter中的內(nèi)容),如果匹配成功即執(zhí)行http報(bào)文的篡改(篡改使用規(guī)則編輯區(qū)內(nèi)容)

    ?

    ?

    ? ? ? ? ? ? 如上圖您可以簡單調(diào)整各顯示區(qū)域的布局

    ?

    回到頂部

    一:規(guī)則匹配區(qū)

    ?

    1.1:『get http sesion in left session list』獲取Session信息

    表示從fiddler Session列表獲取Session信息

    點(diǎn)擊此圖標(biāo)會(huì)將您選中的session的url自動(dòng)填充到urlfilter輸入框中, 并將該session的request及response信息填入下方Http篡改規(guī)則的『Request Replace』及『Response Replace』中方便篡改規(guī)則的編輯

    ?

    (如上圖:選擇fiddler默認(rèn)更新session,點(diǎn)擊獲取按鈕,黃色區(qū)域即為獲取的信息)

    ?

    1.2:『select url filter method』Url匹配方式

    表示url匹配方式(匹配后方文本框中內(nèi)容),支持Contain,StartWith,Is,Regex,AllPass

    • Contion:在當(dāng)前Http請(qǐng)求session url包含指定值時(shí)匹配通過。
    • StartWith:在當(dāng)前Http請(qǐng)求session url以指定值開始時(shí)匹配通過。
    • Is:在當(dāng)前Http請(qǐng)求session url與指定值完全一致時(shí)匹配通過。
    • Regex:在當(dāng)前Http請(qǐng)求session url 通過指定正則匹配時(shí)匹配通過。(如[“^https://www.bing.cn/js/page.\S*?.js\b”該正則匹配表示以“https://www.bing.cn/js/page.”開頭并以“.js”結(jié)尾并且中間含隨機(jī)版本的js請(qǐng)求url)
    • AllPass:對(duì)任意Http請(qǐng)求session url匹配通過。(當(dāng)您需要為所有通過fiddler的請(qǐng)求都進(jìn)行指定規(guī)則的篡改時(shí),比如為所有請(qǐng)求添加標(biāo)記head頭,或設(shè)置禁用驗(yàn)證緩存時(shí)可能會(huì)需要使用到AllPass匹配方式)

    ?

    (如上圖:當(dāng)鼠標(biāo)懸停該區(qū)域,會(huì)有匹配方式提示出現(xiàn))

    ?

    1.3:『edit advanced http filter』高級(jí)匹配

    點(diǎn)擊此圖標(biāo)可以進(jìn)行http篡改匹配規(guī)則的高級(jí)匹配

    包括對(duì)request 對(duì)請(qǐng)求頭及請(qǐng)求實(shí)體的匹配檢查

    如果前面的Url Filter 選項(xiàng)已經(jīng)能幫助您篩選目標(biāo)http請(qǐng)求,您不用再設(shè)置該項(xiàng)

    默認(rèn)狀態(tài)下『edit advanced http filter』圖標(biāo)顯示為黑色,表示沒有對(duì)advanced http filter進(jìn)行過設(shè)置

    如果您對(duì)當(dāng)前匹配規(guī)則的advanced http filter已經(jīng)進(jìn)行過設(shè)置,該圖標(biāo)會(huì)顯示為藍(lán)色

    點(diǎn)擊該圖標(biāo)即可在彈出窗口中設(shè)置 advanced http filter

    如上圖 advanced http filter分為4部分

      1:Url Filter 部分內(nèi)容與前面的Url Filter 完全一致(這里不在單獨(dú)說明)

      2:Head Filter 部分可以幫你設(shè)置head頭篩選,點(diǎn)擊『+』彈出操作框按提示輸入Key于Value(表示被匹配http請(qǐng)求必須滿足,請(qǐng)求頭中必須含有Key值請(qǐng)求頭,并且該請(qǐng)求頭的內(nèi)容必須含有Value值)

        ?點(diǎn)擊目標(biāo)控制區(qū)域『+』彈出添加對(duì)話框進(jìn)行添加

        點(diǎn)擊目標(biāo)控制區(qū)域『-』 可以刪除已經(jīng)添加但不再需要的規(guī)則(不選擇任何指定item則移除當(dāng)前所有)

        雙擊任意條目彈出編輯框可以對(duì)已經(jīng)添加條目進(jìn)行編輯操作

      3:HTTP Body Filter 部分的邏輯于Url Filter 維持一致,唯一不同的是此處的篩選條件是請(qǐng)求的body

      4:Rule Alias 部分用于設(shè)置該規(guī)則的別名 (該別名會(huì)顯示在后面 『Tamper Rule』篡改規(guī)則列表區(qū))

      注意以上2,3,4都不是必須項(xiàng)如果不需要可以不用填寫(沒有設(shè)置過2,3,4項(xiàng)即為未設(shè)置advanced http filter)

    ?

    ?

    1.4:『new or edit rule』創(chuàng)建規(guī)則

    在創(chuàng)建模式確認(rèn)創(chuàng)建新規(guī)則

    在編輯模式確認(rèn)保存當(dāng)前規(guī)則

    該按鈕與下方『規(guī)則編輯控制條』中確認(rèn)按鈕意義一致

    ?

    ?

    回到頂部

    二:請(qǐng)求或響應(yīng)篡改規(guī)則編輯區(qū)域

    ?

    HTTP篡改區(qū)有4個(gè)tab分別是 請(qǐng)求修改『Request Modific』;請(qǐng)求替換『Request Replsce』;響應(yīng)修改『Response Modific』;響應(yīng)替換『Response Replace』

    通過設(shè)置這4類篡改規(guī)則您幾乎可以對(duì)指定Http請(qǐng)求的request或response進(jìn)行任意的篡改,使它變?yōu)槟枰臉幼?/p>

    篡改還包括對(duì)文件及動(dòng)態(tài)參數(shù)化及外部文件數(shù)據(jù)源的支持

    ?

    2.1:『Request Modific』請(qǐng)求修改

    ?

    『Request Modific』可以完成對(duì)http請(qǐng)求的篡改,請(qǐng)求修改按HTTP自身結(jié)構(gòu)分為4塊

    分別是對(duì)請(qǐng)求url的修改,對(duì)請(qǐng)求頭的移除,對(duì)請(qǐng)求頭的添加,對(duì)請(qǐng)求實(shí)體的修改

    ?

    2.1.1:請(qǐng)求行uri 修改 『Uri Modofic』

    該編輯區(qū)用于控制修改匹配http request的url

    不輸入任何值,則代表不修改該項(xiàng)

    第一個(gè)文本框輸入需要替換的內(nèi)容,第二個(gè)文本框輸入替換之后的內(nèi)容

    注意:該替換規(guī)則將替換目標(biāo)中所有匹配字符串(如果發(fā)現(xiàn)多處匹配,將都被替換)

    如果第一個(gè)文本框置空,僅在第二個(gè)文本框中輸入內(nèi)容,則代表替換請(qǐng)求行的整個(gè)uri

    如請(qǐng)求行是 GET https://www.fiddler2.com/UpdateCheck.aspx?isBeta=False HTTP/1.1 ,在第一個(gè)文本框中輸入""(置空不輸入),在第二個(gè)文本框中輸入“http://test.com”

    如果請(qǐng)求『Url Filter』規(guī)則匹配,請(qǐng)求在發(fā)送前請(qǐng)求行將被篡改為 GET http://test.com HTTP/1.1

    ?

    如上圖,在第一個(gè)文本框中輸入"isBeta=False",在第二個(gè)文本框中輸入“isBeta=true”

    如果請(qǐng)求『Url Filter』規(guī)則匹配,若請(qǐng)求行是 GET https://www.fiddler2.com/UpdateCheck.aspx?isBeta=False HTTP/1.1 ,則Url Modific執(zhí)行(因?yàn)閡rl含有“isBeta=False”),請(qǐng)求在發(fā)出前,請(qǐng)求行將被篡改為 GET https://www.fiddler2.com/UpdateCheck.aspx?isBeta=true HTTP/1.1

    ?

    2.1.2:請(qǐng)求頭heads移除『Head Modific』『Remove Head』

    該編輯區(qū)用于控制修改匹配http request的head頭,刪除指定request head頭

    點(diǎn)擊目標(biāo)控制區(qū)域『+』彈出添加對(duì)話框進(jìn)行添加

    點(diǎn)擊目標(biāo)控制區(qū)域『-』 可以刪除已經(jīng)添加但不再需要的head移除規(guī)則(不選擇任何指定item則移除當(dāng)前所有)

    雙擊任意條目彈出編輯框可以對(duì)已經(jīng)添加條目進(jìn)行編輯操作

    (如上圖點(diǎn)擊添加,彈出窗口進(jìn)行添加,或雙擊任意item彈出該窗口進(jìn)行編輯)

    以上『Remove Head』設(shè)置表示移除請(qǐng)求頭中的Pragram,Cache-Contorl,If-None-Match,If-Modified-Since請(qǐng)求頭

    ?

    2.1.3:請(qǐng)求頭heads添加『Head Modific』『Add Head』

    該編輯區(qū)用于控制修改匹配http request的head頭,添加指定request head頭

    點(diǎn)擊目標(biāo)控制區(qū)域『+』彈出添加對(duì)話框進(jìn)行添加

    點(diǎn)擊目標(biāo)控制區(qū)域『-』 可以刪除已經(jīng)添加但不再需要的head添加規(guī)則(不選擇任何指定item則移除當(dāng)前所有)

    雙擊任意條目彈出編輯框可以對(duì)已經(jīng)添加條目進(jìn)行編輯操作

    ?

    ?

    (如上圖點(diǎn)擊添加彈出窗口進(jìn)行添加,或雙擊任意item彈出該窗口進(jìn)行編輯)

    以上『Add Head』設(shè)置表示添加請(qǐng)求頭請(qǐng)求頭Pragma: no-cache , Cache-Control: no-cache (因?yàn)樵凇篟emove Head』中也有Pragme請(qǐng)求頭,所以實(shí)際含義是修改Pragme請(qǐng)求頭為no-cache)

    ?

    2.1.3備注

    • 關(guān)于『Remove Head』

    因?yàn)镽FC@2616 請(qǐng)求頭中頭域名稱不區(qū)分大小寫,所以host與hoST的意義是一樣的,一旦規(guī)則匹配將會(huì)移除請(qǐng)求頭中的host頭

    • 關(guān)于『Add Head』

    添加請(qǐng)求頭允許添加2個(gè)同名域頭,比如您可以同時(shí)添加Accept-Encoding: gzip 和Accept-Encoding: deflate 這2個(gè)頭會(huì)分別添加到請(qǐng)求頭域(即使使用一樣的頭域名稱)

    注意由于同名頭域并不會(huì)相互覆蓋,所以如果你想實(shí)現(xiàn)指定請(qǐng)求頭的修改功能,需要先刪除指定頭域,再添加該頭域

    比如您需要將Pragma:xxx 改為Pragma: no-cache,就需要先添加一個(gè)Remove Head測(cè)試規(guī)則Pragma,然后添加一個(gè)頭域修改規(guī)則Pragma: no-cache

    • 關(guān)于請(qǐng)求或響應(yīng)篡改規(guī)則編輯區(qū)域其他類似『Add Head』的操作規(guī)則

    基本操作邏輯維持一致

    點(diǎn)擊『+』添加項(xiàng)

    點(diǎn)擊『-』刪除選定項(xiàng)(未選定任何項(xiàng)刪除全部)

    雙擊任意項(xiàng)為編輯該項(xiàng)

    ?

    ?

    2.1.4:請(qǐng)求體Body修改『Body Modific』

    如果您的請(qǐng)求中含有Body,您可能也會(huì)有對(duì)請(qǐng)求體body的修改的需求

    Body Modific的邏輯與Uri Modific基本維持一致,不過同時(shí)支持regex正則替換

    不輸入任何值,則代表不修改該項(xiàng)

    第一個(gè)文本框輸入需要替換的內(nèi)容,第二個(gè)文本框輸入替換之后的內(nèi)容

    當(dāng)?shù)谝粋€(gè)文本框以<regex>開頭時(shí)則表示啟用正則替換,后面的內(nèi)容為查找替換的的正則表達(dá)式

    如第一個(gè)文本框中輸入"<egex>nloginpwd=.*?&"(不包含引號(hào)),第二個(gè)文本框中輸入“nloginpwd=123456&”

    該正則替換規(guī)則表示將請(qǐng)求體Body中所有以“nloginpwd=”開頭,以“&”結(jié)尾的文本替換為“nloginpwd=123456”

    如上圖,在第一個(gè)文本框置空,在第二個(gè)文本框中輸入“test”

    如果請(qǐng)求『Url Filter』規(guī)則匹配,Http請(qǐng)求body將被替換為“test body”

    注意這種設(shè)置即使原始body為空也會(huì)進(jìn)行替換(實(shí)際上GET等請(qǐng)求是不含有請(qǐng)求實(shí)體的,此處僅為演示)

    ?

    2.2:『Request Replace』請(qǐng)求替換

    『Request Replace』可以完成對(duì)http請(qǐng)求的整體替換

    Request Replace是http請(qǐng)求的另一種篡改模式,他不關(guān)心匹配請(qǐng)求的原始request內(nèi)容,直接對(duì)整個(gè)請(qǐng)求做替換操作

    Request Replace 對(duì)替換規(guī)則的編輯分為兩種方式,輔助模式及Raw模式

    為了方便您創(chuàng)建替換規(guī)則,『Request Replace』按http請(qǐng)求結(jié)構(gòu)分為3部分,請(qǐng)求行,請(qǐng)求頭請(qǐng)求體,及Raw描述切換(不使用格式輔助,進(jìn)入Raw編輯進(jìn)行編輯)

    ?

    2.2.1 『Start Line』編輯替換請(qǐng)求行

    請(qǐng)求行的編輯按請(qǐng)求行的規(guī)則分為

    對(duì)請(qǐng)求方法的編輯(可以進(jìn)行下拉輔助編輯,或手動(dòng)輸入自定義方法)

    對(duì)url的編輯(注意請(qǐng)保持url的完整性)

    對(duì)http協(xié)議版本的編輯(可以進(jìn)行下拉輔助編輯,或手動(dòng)輸入自定義方法)

    ?

    2.2.2 『Request Heads』編輯替換請(qǐng)求頭

    請(qǐng)求替換中對(duì)請(qǐng)求頭的編輯與【2.1.3】中設(shè)置請(qǐng)求頭類似,使用同樣的方式進(jìn)行配置編輯(此處不再重復(fù)說明)

    此處的請(qǐng)求頭將與上面『Start Line』一起用于整體替換

    ?

    2.2.3 『Request Body』編輯替換請(qǐng)求體

    請(qǐng)求體的替換的編輯基本功能十分便捷,您只需要在圖中高亮部分填入您想要的request body正文即可

    如果您的body正文是二進(jìn)制的數(shù)據(jù),或是一個(gè)需要上傳的文件,您可以直接在此處添加本地文件


    ?

    編輯框單機(jī)鼠標(biāo)右鍵,在彈出菜單中選擇『add file』

    選擇計(jì)算機(jī)中本地文件文件

    ?

    如上圖選擇文件后“<<replace file path>>C:\Users\administer\Pictures\3613e290-8028-4ddc-946c-b89c67f4f31a.jpg”將會(huì)被添加至編輯框

    表示3613e290-8028-4ddc-946c-b89c67f4f31a.jpg該文件將直接作為request的請(qǐng)求實(shí)體進(jìn)行替換

    您也可以按照格式約定手動(dòng)添加文件(以“<<replace file path>>”開頭,后接文件路徑)

    注意:只有以<<replace file path>>開頭才表示文件模式(“data<<replace file path>>C:\test.jpg”這種數(shù)據(jù)將不會(huì)被當(dāng)作文件處理)

    關(guān)于『add Parameter』添加參數(shù)化數(shù)據(jù)

    您可以在您需要的任意地方右鍵選擇『add Parameter』添加您想要的靜態(tài)化數(shù)據(jù)

    詳細(xì)使用方法請(qǐng)查看【八:參數(shù)化數(shù)據(jù)設(shè)置】(不了解參數(shù)化數(shù)據(jù)的設(shè)置并不會(huì)影響您使用freehttp的主要功能)

    ?

    2.2.4 『Raw Mode』切換原始數(shù)據(jù)視圖

    如果您熟悉Http原始報(bào)文,您可以點(diǎn)擊下圖中的圖標(biāo)進(jìn)入raw mode,對(duì)將要替換的原始報(bào)文進(jìn)行編輯

    ?

    ?

    ?

    進(jìn)入raw mode可以直接編輯(如果您使用『get http sesion in left session list』獲取過session信息,這里會(huì)提前填入目標(biāo)http的request報(bào)文方便您的編輯)

    您不用擔(dān)心您輸入的錯(cuò)誤的http格式會(huì)影響替換,如果使用『raw mode』在您編輯或新增完成時(shí),系統(tǒng)會(huì)檢查你的輸入,如果格式有誤,會(huì)給出明確提示告訴您什么地方不符合標(biāo)準(zhǔn)規(guī)范(標(biāo)準(zhǔn)規(guī)范請(qǐng)參見RFC2616)

    ?

    ?

    raw mode 支持上文request replace的全部功能,包括【八:參數(shù)化數(shù)據(jù)設(shè)置】會(huì)介紹的參數(shù)化數(shù)據(jù)??

    在raw mode您同樣可以使用文件替換request body,替換方式與【2.2.3】中的問題替換基本維持一致

    需要注意的是,只有request body才能被替換為文件

    如上圖如果您已經(jīng)有body 內(nèi)容為test data,則不能同時(shí)添加文件body

    ?

    2.2.4備注

    在右鍵添加文件時(shí),同時(shí)可以看到右鍵菜單中有『anto Content-Length』,如果勾選該項(xiàng)在你創(chuàng)建或保存當(dāng)前規(guī)則時(shí)會(huì)自動(dòng)計(jì)算Body長度并為請(qǐng)求添加Content-Length頭。

    在你點(diǎn)擊創(chuàng)建或保存按鈕時(shí),『Request Replace』Tab當(dāng)前停在raw mode模式 即保存raw mode 數(shù)據(jù),停在輔助模式則使用輔助模式的數(shù)據(jù)

    ?

    2.3:『Response Modific』響應(yīng)修改

    『Response Modific』可以完成對(duì)http響應(yīng)的任意篡改,請(qǐng)求修改按HTTP自身結(jié)構(gòu)分為3塊,分別是對(duì)響應(yīng)頭的移除,對(duì)請(qǐng)響應(yīng)的添加,對(duì)響應(yīng)實(shí)體的修改

    『Response Modific』的編輯及執(zhí)行模式與『Response Modific』基本維持一致,不同的是在『Response Modific』不能對(duì)響應(yīng)行及響應(yīng)狀態(tài)碼進(jìn)行篡改(因?yàn)閷?duì)狀態(tài)碼的修改意味著對(duì)整個(gè)響應(yīng)的完全修改,如果需要修改狀態(tài)碼請(qǐng)使用后面的『Response Replace』)

    ?

    ?

    2.3.1:響應(yīng)頭heads移除『Head Modific』『Remove Head』

    該編輯區(qū)用于控制修改匹配http response的head頭,刪除指定response head頭

    該項(xiàng)編輯邏輯與【2.1.2】中對(duì)請(qǐng)求頭的移除是一致的,這里不再重復(fù)說明

    ?

    2.3.2:響應(yīng)頭heads添加『Head Modific』『Add Head』

    該編輯區(qū)用于控制修改匹配http response的head頭,添加指定response head頭

    該項(xiàng)編輯邏輯與【2.1.3】中對(duì)請(qǐng)求頭的添加是一致的,這里不再重復(fù)說明

    ?

    ?

    2.3.3:響應(yīng)體Body修改『Body Modific』

    如果您的響應(yīng)中含有body,您可能也會(huì)有對(duì)響應(yīng)body的修改的需求

    同樣支持完全覆蓋,替換,正則替換

    該項(xiàng)編輯邏輯與【2.1.4】中對(duì)請(qǐng)?bào)w的修改是一致的,這里不再重復(fù)說明

    如上圖設(shè)置則表示為匹配的http響應(yīng)添加一個(gè)Set-Cookie頭,內(nèi)容為UM_distinctid=167,當(dāng)瀏覽器接收到這個(gè)被篡改過的響應(yīng)頭后,會(huì)為該域名添加名為UM_distinctid的cookie,如果已有同名cookie則會(huì)直接覆蓋

    ?

    ?

    2.4:『Response Replace』響應(yīng)替換

    『Response Replace』可以完成對(duì)http響應(yīng)的整體替換

    Response Replace是http響應(yīng)的另一種篡改模式,他不關(guān)心匹配請(qǐng)求的原始response內(nèi)容,直接對(duì)整個(gè)響應(yīng)做替換操作

    Response Replace 對(duì)響應(yīng)的替換直接使用Raw模式,不過為了方便替換提供了一組標(biāo)準(zhǔn)響應(yīng)返回的模板

    Response Replace 按編輯功能分為3部分,響應(yīng)Raw內(nèi)容編輯,模板選擇,Response Direct選擇

    ?

    2.4.1 響應(yīng)Raw原始報(bào)文編輯

    在此Tab可以直接編輯替換用的Raw原始報(bào)文(如果您使用『get http sesion in left session list』獲取過session信息,這里會(huì)提前填入目標(biāo)http的response報(bào)文方便您的編輯)

    您不用擔(dān)心您輸入的錯(cuò)誤的http格式會(huì)影響替換,如果使用『response replace』在您保存或新建時(shí)系統(tǒng)會(huì)檢查你的輸入,并給出明確提示告訴您什么地方不符合標(biāo)準(zhǔn)規(guī)范(標(biāo)準(zhǔn)規(guī)范請(qǐng)參見RFC2616)

    與【2.2.4】 請(qǐng)求『Raw Mode』替換一樣,支持文件及參數(shù)化數(shù)據(jù),除報(bào)文要求的格式外,其他編輯邏輯與【2.2.4】中規(guī)則維持一致,此處不再重復(fù)說明

    ?

    2.4.2『Select Replace Template』選擇模板

    如果您需要自己創(chuàng)建response響應(yīng)內(nèi)容,您可以使用模板輔助您的編輯,模板包含大多數(shù)常規(guī)響應(yīng)的基本格式

    如上圖下拉選擇您想要的模板即可,上圖中選擇了[HTTP/1.1 200 OK]的模板,模板內(nèi)容即是一個(gè)常規(guī)Http 200 返回的例子,您可以直接在例子上進(jìn)行修改

    ?

    2.4.3『Response Direct』直接返回響應(yīng)

    該選項(xiàng)用于控制response返回時(shí)機(jī),當(dāng)『Url Filter』匹配到http請(qǐng)求后,同時(shí)該篡改規(guī)則為『Response Replace』時(shí),可以使用該項(xiàng)設(shè)置請(qǐng)求是否直接返回

    當(dāng)『Response Direct』被勾選選時(shí),feddler將不會(huì)把請(qǐng)求發(fā)送到目標(biāo)服務(wù)器,而是使用Response Replace里的resonse直接返回,即客戶端發(fā)送請(qǐng)求后就會(huì)立即接收到您自定義的響應(yīng),這種模式對(duì)于實(shí)際請(qǐng)求是不存在的或暫時(shí)不能連通的情況是十分必要(比如您想要使用暫時(shí)未開發(fā)好的接口,這時(shí)就需要該選項(xiàng)mock接口),同時(shí)您可以設(shè)置接口的執(zhí)行時(shí)間在后面【3.3】『set response latency』 會(huì)介紹如何為響應(yīng)設(shè)置指定響應(yīng)時(shí)間

    當(dāng)『Response Direct』未被勾選時(shí),則使用常規(guī)請(qǐng)求路徑,請(qǐng)求會(huì)被發(fā)送至服務(wù)器(即使服務(wù)的返回并不會(huì)被使用),在服務(wù)返回響應(yīng)結(jié)果后,執(zhí)行替換操作 (默認(rèn)不勾選)

    ?

    ?

    回到頂部

    三:規(guī)則編輯控制條及常規(guī)設(shè)置編輯區(qū)域

    規(guī)則控制編輯條由3部分組成如上圖1,2,3,4組成的規(guī)則控制,5快速規(guī)則編輯,6篡改工具及常規(guī)設(shè)置

    ?

    3.1『affirm rule』確認(rèn)創(chuàng)建規(guī)則或保存規(guī)則修改

    該按鈕的功能與【1.4】『new or edit rule』維持一致

    在創(chuàng)建模式確認(rèn)創(chuàng)建新規(guī)則

    在編輯模式確認(rèn)保存當(dāng)前規(guī)則

    如上圖當(dāng)年點(diǎn)擊確認(rèn)(黃色標(biāo)記區(qū)域)時(shí),即會(huì)創(chuàng)建能編輯的篡改規(guī)則

    請(qǐng)注意上方『url Filter』右側(cè)文字提示(New Mode 表示現(xiàn)在處于創(chuàng)建模式)會(huì)顯示當(dāng)前模式

    還有一點(diǎn)需要說明當(dāng)前篡改規(guī)則編輯區(qū)域停留在哪種編輯模式,即是對(duì)哪種規(guī)則的保存(『Request Modific』『Request Replsce』『Response Modific』『Response Replace』)

    單個(gè)規(guī)則僅包含一種篡改規(guī)則,如果您需要對(duì)同一個(gè)請(qǐng)求同時(shí)執(zhí)行多個(gè)篡改,您可以對(duì)其創(chuàng)建多個(gè)篡改規(guī)則(實(shí)際應(yīng)用中這種場(chǎng)景是存在的)

    如果當(dāng)前創(chuàng)建的規(guī)則是『Request Modific』或『Request Replsce』,創(chuàng)建完成的規(guī)則會(huì)出現(xiàn)在『Request Rule』列表中,如果是『Response Modific』或『Response Replace』,創(chuàng)建完成則會(huì)出現(xiàn)在『Response Rule』中

    完成創(chuàng)建后,下方日志會(huì)有相應(yīng)記錄,并清空當(dāng)前編輯區(qū)域(圖中編輯區(qū)域沒有清空僅為演示,實(shí)際使用中編輯區(qū)數(shù)據(jù)將完全被清除)

    當(dāng)您點(diǎn)擊確認(rèn)時(shí)系統(tǒng)會(huì)檢查您編輯的規(guī)則,如果有不符合要求的地方會(huì)有相應(yīng)提示,并在出現(xiàn)錯(cuò)誤的編輯的區(qū)域進(jìn)行短時(shí)間的高亮顯示以提示 (通常如果是新規(guī)則會(huì)在添加在規(guī)則類表末尾,并有短時(shí)間高亮顯示進(jìn)行提示)

    ?

    3.2『cancel edit』取消

    『cancel edit』功能相對(duì)簡單,僅用于清除編輯區(qū)域保存的信息

    在創(chuàng)建模式直接清除信息,在編輯模式可以取消對(duì)當(dāng)前規(guī)則的編輯狀態(tài)

    ?

    3.3『set response latency』 設(shè)置響應(yīng)延時(shí)

    『set response latency』可用于設(shè)置『Response Rule』的響應(yīng)延遲(『Response Modific』及『Response Replace』為『Response Rule』)

    如上圖該圖標(biāo)按鈕有3種狀態(tài)(can set , unable set,is seted)

    1.can set:延時(shí)設(shè)置對(duì)當(dāng)前篡改規(guī)則為可設(shè)置狀態(tài),此時(shí)點(diǎn)擊該圖標(biāo)即彈出設(shè)置框。

    2.unable set :延時(shí)設(shè)置對(duì)當(dāng)前篡改規(guī)則為不可設(shè)置狀態(tài),此時(shí)該圖標(biāo)不能點(diǎn)擊,因?yàn)轫憫?yīng)延時(shí)是針對(duì)http response的延時(shí),即該設(shè)置對(duì)『Request Modific』『Request Replsce』是無效的

    3.is seted:第3種狀態(tài)是已經(jīng)設(shè)置過延時(shí)的情況,如圖設(shè)置過數(shù)值將會(huì)直接顯示在剛剛圖標(biāo)的位置。(這個(gè)時(shí)候也可以點(diǎn)擊該數(shù)值進(jìn)行修改)

    設(shè)置窗口如上圖,您直接填入數(shù)值即可(單位為毫秒),如果填0或空則表示不設(shè)置延時(shí)

    ?

    3.4『set parameter pick info』設(shè)置參數(shù)化數(shù)據(jù)獲取規(guī)則


    『set parameter pick info』用于在原始請(qǐng)求或響應(yīng)中捕獲初始化數(shù)據(jù)(對(duì)現(xiàn)有參數(shù)化數(shù)據(jù)做添加或修改操作)

    該圖標(biāo)有2種狀態(tài)含義分別是

    1:該篡改規(guī)則未設(shè)置任何參數(shù)捕獲規(guī)則

    2:該篡改規(guī)則至少已經(jīng)設(shè)置一條參數(shù)捕獲規(guī)則

    這兩種狀態(tài)下都可以點(diǎn)擊圖標(biāo)直接進(jìn)入編輯框,如果已經(jīng)有設(shè)置過的規(guī)則,已有規(guī)則會(huì)在編輯框中直接加載

    詳細(xì)使用方法請(qǐng)查看【八:參數(shù)化數(shù)據(jù)設(shè)置】(不了解參數(shù)化數(shù)據(jù)的設(shè)置并不會(huì)影響您使用freehttp的主要功能)

    ?

    3.5『Quick Rule』快速規(guī)則

    當(dāng)前版本共有6個(gè)快速規(guī)則,幫助您快速完成篡改規(guī)則的設(shè)置

    ?

    3.5.1『disable cache』禁止緩存

    該quick rule針對(duì)Request Modific,可以為匹配規(guī)則的請(qǐng)求去除條件緩存并強(qiáng)制服務(wù)器不要使用緩存

    如上圖使用該quick rule后會(huì)在『Request Modific』中『Head Modific』直接添加預(yù)設(shè)的值,這時(shí)您直接點(diǎn)擊確認(rèn)即可用快速完成一個(gè)Request Rule的創(chuàng)建

    ?

    3.5.2『add cookie 』添加請(qǐng)求Cookie

    該quick rule針對(duì)Request Modific,可以為匹配規(guī)則的請(qǐng)求添加指定cookie

    選擇項(xiàng)后彈出如上圖對(duì)話框,直接輸入您需要設(shè)置的cookie即可,(注意cookie的格式 key=value )

    ?

    3.5.3『delete cookie』刪除客戶端Cookie

    該quick rule針對(duì)Response Modific,可以為匹配規(guī)則的響應(yīng)添加Set-Cookie(通過設(shè)置指定cookie立即過期,從而實(shí)現(xiàn)刪除客戶端cookie的功能)

    選擇項(xiàng)后彈出如上圖對(duì)話框,在Name處輸入你想要?jiǎng)h除cookie的名稱(同時(shí)為了讓瀏覽器準(zhǔn)確定位到您要?jiǎng)h除的cookie,你還需要注意修改Domain及Path為正確的值,一般情況下Domain為當(dāng)前網(wǎng)站域名,Path為/)

    ?

    3.5.4『set client cookie』設(shè)置客戶端Cookie

    該quick rule針對(duì)Response Modific,可以為匹配規(guī)則的響應(yīng)添加指定Set-Cookie,設(shè)置客戶端cookie (這里是通過Set-Cookie完成對(duì)客戶端cookie的效果,比如在手機(jī)瀏覽器,或某些軟件的內(nèi)置web瀏覽器并沒有提供調(diào)試模式,這個(gè)時(shí)候Set-Cookie將是不錯(cuò)的解決方案)

    選擇項(xiàng)后彈出如上圖對(duì)話框,按提示輸入指定值即可

    ?

    3.5.5『copy session cookies』復(fù)制Cookies

    該quick rule針對(duì)針對(duì)Response Modific,可以快速將指定session的所有cookies快速的設(shè)置到客戶端另一個(gè)域下(該功能可以讓您在多個(gè)瀏覽器,甚至多個(gè)設(shè)備,多個(gè)域名下共享同一份cookie,這在調(diào)試或測(cè)試中跳過授權(quán)會(huì)非常有效)

    ?

    如上圖要使用該功能,您需要先在Filddler左側(cè)Session列表選擇您需要復(fù)制cookies的源請(qǐng)求(圖中選擇的是github.com/lulianqi/FreeHttp),選中指定session后點(diǎn)擊copy session cookies即可以看到在Heads Modific的Add Head編輯框自動(dòng)添加了來自github的cookie信息(該規(guī)則會(huì)為匹配的請(qǐng)求添加Set-Cookies從而達(dá)到復(fù)制效果)

    ?

    3.5.6『add UserAgent』添加UserAgent

    該quick rule針對(duì)Request Modific,可以為匹配規(guī)則的請(qǐng)求添加指定UserAgent

    如上圖該項(xiàng)相對(duì)簡單,直接填入您需要的UserAgent即可

    ?

    3.6『Modific Tool』篡改工具及常規(guī)設(shè)置

    當(dāng)前版本共有4個(gè)工具項(xiàng),方便您的使用或提供其他設(shè)置功能

    3.6.1『show selected session stream』顯示session流信息

    該工具可以將您選擇的session以RAW的模式顯示在一個(gè)新的窗口(該窗口一直頂層顯示,但不影響您在主窗口下的操作),您在創(chuàng)建篡改規(guī)則的同時(shí)可以使用該窗口查看session信息而不用切換Tab(您也可以直接在session列表中選中session拖動(dòng)到編輯區(qū)域,raw形式的報(bào)文同樣會(huì)顯示在日志區(qū),但不會(huì)打開新的窗口 )

    如上圖在fiddler左側(cè)session列表選擇任意請(qǐng)求,點(diǎn)擊show selected session stream將會(huì)彈出新的獨(dú)立窗口以顯示您選擇的session的原始報(bào)文

    ?

    3.6.2『http tamper setting』基本設(shè)置

    該項(xiàng)提供一些對(duì)FreeHttp插件的基本設(shè)置

    • is only match fist tamper rule: (默認(rèn)是)是否僅執(zhí)行第一個(gè)匹配成功的篡改規(guī)則(因?yàn)槟梢詫?duì)同一個(gè)請(qǐng)求有多個(gè)篡改規(guī)則,您可以通過此選項(xiàng)控制是否能對(duì)一個(gè)http報(bào)文執(zhí)行多個(gè)匹配規(guī)則篡改規(guī)則)
    • is skip tls handshake:(默認(rèn)是)是否跳過對(duì)TLS握手包進(jìn)行匹配(除非您需要調(diào)試TLS握手,建議您維持默認(rèn)設(shè)置)
    • is default enable tamper rule:(默認(rèn)否)是否默認(rèn)啟用規(guī)則匹配(在『Request Rule』及『Response Rule』都有獨(dú)立啟用開關(guān),該選項(xiàng)用于控制軟件啟動(dòng)時(shí)的默認(rèn)狀態(tài))

    ?

    3.6.3『parameter data manage』參數(shù)化數(shù)據(jù)管理器

    該項(xiàng)提供對(duì)FreeHttp的參數(shù)化數(shù)據(jù)的集中管理

    選擇該項(xiàng)后彈出層管理器窗口,您可以在管理器中對(duì)參數(shù)進(jìn)行新增,修改,調(diào)試等操作

    后面【八:參數(shù)化數(shù)據(jù)設(shè)置】會(huì)詳細(xì)介紹參數(shù)化數(shù)據(jù)的使用,這里暫不具體說明

    ?

    3.6.4『issues and suggest』

    點(diǎn)擊該選會(huì)使用您的默認(rèn)瀏覽器打開問題提交頁,您可以在該頁提交您的問題及意見(在此處提交問題可能需要您擁有g(shù)ithub帳號(hào),如果不方便登錄可以直接發(fā)送郵件至mycllq@hotmail.com提交您的問題及建議)

    ?

    ?

    回到頂部

    四:『Execution Log』執(zhí)行日志

    該區(qū)域僅對(duì)篡改規(guī)則的操作及執(zhí)行日志進(jìn)行顯示

    日志統(tǒng)一格式以數(shù)據(jù)開頭,并用顏色區(qū)分錯(cuò)誤,提示及信息日志

    ?

    ?

    ?

    回到頂部

    五:『Tamper Rule』篡改規(guī)則列表

    『Tamper Rule』篡改規(guī)則主要集中顯示及管理您已經(jīng)創(chuàng)建的規(guī)則,您可以在這里設(shè)置需要生效的規(guī)則,刪除或修改已有規(guī)則,對(duì)規(guī)則排序等操作

    列表分為2部分(這2部分的操作邏輯都是一致,僅是存儲(chǔ)的規(guī)則類型不一樣)

    • 上部列表為『Request Rule』請(qǐng)求篡改規(guī)則(由『Request Modific』,以編輯圖標(biāo)顯示及『Request Replsce』以替換圖標(biāo)顯示組成)
    • 下部列表為『Request Rule』響應(yīng)篡改規(guī)則(由『Response Modific』,以編輯圖標(biāo)顯示及『Response Replace』,以替換圖標(biāo)顯示組成)

    ?

    5.1 Tamper Rule控制選項(xiàng)

    Tamper Rule控制選項(xiàng)主要由2部分組成

    位于右上角的控制欄,從左至右分別是『+』添加,『-』刪除,『啟用』控制

    點(diǎn)擊添加:編輯面板會(huì)直接切換至『Request Modific』提示您進(jìn)行編輯(如果是在『Response Rule』上點(diǎn)擊添加編輯面板則會(huì)切換至『Response Modific』)

    點(diǎn)擊刪除:刪除選中Rule,如果沒有選擇任何Rule則會(huì)向您詢問是否刪除全部Rule

    啟用控制:Request Rule與Response Rule的啟用控制是獨(dú)立的,您可以分別設(shè)置他們的啟用狀態(tài),只有當(dāng)您選擇啟用后,Fillder才會(huì)匹配列表中處于Checked狀態(tài)的規(guī)則,匹配命中后執(zhí)行規(guī)則(您可以設(shè)置啟動(dòng)時(shí)直接啟用,詳見【3.6.2】『http tamper setting』)

    在篡改規(guī)則列表區(qū)任意位置右鍵可提出Rule控制菜單

    • remove selected rule 刪除選定規(guī)則
    • remove all rule 刪除所有規(guī)則
    • enable this rule 生效指定規(guī)則
    • enable all rule 生效所有規(guī)則
    • unable all rule 讓所有規(guī)則不生效
    • edit this rule 編輯當(dāng)前規(guī)則

    ?

    5.2 Tamper Rule信息顯示

    如上圖您創(chuàng)建的規(guī)則都會(huì)顯示在Tamper Rule列表里,每條規(guī)則在列表處顯示信息依次有如下4項(xiàng)

    1:是否進(jìn)行匹配復(fù)選框(如果您想要篡改規(guī)則生效,除了要設(shè)置『啟用』控制,還需要將此處設(shè)置為勾選狀態(tài))

    2:替換/編輯圖標(biāo),該處僅顯示一個(gè)圖標(biāo)表示當(dāng)前篡改規(guī)則是一個(gè)編輯規(guī)則還是替換規(guī)則

    3:當(dāng)前篡改規(guī)則的的序號(hào),注意該序號(hào)是自動(dòng)生成的唯一序號(hào),在您對(duì)規(guī)則做添加或刪除操作時(shí)會(huì)重新生成每條規(guī)則的序號(hào)

    4:規(guī)則名稱,如果您沒有設(shè)置規(guī)則別名這里會(huì)直接顯示匹配url的方式加匹配url值(別名的設(shè)置請(qǐng)參考【1.3】『edit advanced http filter』)

    ?

    如上圖,當(dāng)您將鼠標(biāo)移至rule圖標(biāo)處,會(huì)顯示規(guī)則匹配的詳細(xì)內(nèi)容(僅顯示匹配信息,不顯示篡改詳情)

    上圖規(guī)則表示當(dāng)請(qǐng)求同時(shí)滿足 以下規(guī)則

    1:請(qǐng)求url 必須等于“https://www.fiddler2.com/UpdateCheck.aspx?isBeta=False”

    2:請(qǐng)求必須含有名為“Data”的請(qǐng)求頭,且該請(qǐng)求頭的值含有“GMT”

    3:請(qǐng)求Body必須含有上圖指定字符串

    ?

    5.3 Rule的編輯及排序

    如上圖您在rule列表對(duì)任意篡改規(guī)則進(jìn)行雙擊則進(jìn)入編輯模式,對(duì)當(dāng)前規(guī)則進(jìn)行編輯

    處于編輯模式的rule在列表處以紅色背景展示,在圖中紅線處也顯示了當(dāng)前處于編輯狀態(tài)的規(guī)則ID

    請(qǐng)注意編輯完成后務(wù)必點(diǎn)擊保存使更改生效(保存成功后當(dāng)前rule規(guī)則特殊背景色會(huì)消失)

    如果您想放棄修改請(qǐng)點(diǎn)擊取消(詳見:【3.2】『cancel edit』取消)

    規(guī)則的匹配是由上至下的,所以最上面的規(guī)則會(huì)被先匹配到,如果您『is only match fist tamper rule』設(shè)置的是ON,那如果有2個(gè)生效規(guī)則都可以被匹配到,實(shí)際當(dāng)前一個(gè)匹配規(guī)則匹配成功即會(huì)停止下面的匹配。這種情況下,規(guī)則順序的更改將十分必要。

    Rule順序的調(diào)整也十分方便,您只需要選擇您想要調(diào)整位置的rule(支持多選),將它拖動(dòng)到您需要的位置即可。

    ?

    回到頂部

    六:快速入門

    這里向您演示如何快速創(chuàng)建一個(gè)規(guī)則,并完成對(duì)http請(qǐng)求或響應(yīng)的修改

    以https://www.fiddler2.com/UpdateCheck.aspx?isBeta=False為例(該請(qǐng)求實(shí)際為fillder更新檢查的請(qǐng)求)

    假設(shè)我們希望修改url中isBeta的值為ture,并將Connection:頭修改為Keep-Alive

    您只需要在填入如上圖所示信息,點(diǎn)擊右下角確認(rèn)

    如上圖設(shè)置開啟規(guī)則匹配并勾選您需要參與匹配的規(guī)則(圖中序號(hào)為6的的請(qǐng)求即是我們剛剛創(chuàng)建的規(guī)則)

    ?

    當(dāng)系統(tǒng)匹配到http請(qǐng)求后,會(huì)將fiddler左側(cè)session列表中被匹配中session,及右側(cè)rule列表被匹配中規(guī)則同時(shí)以淺黃色高亮提示(rule列表處高亮提示將在2-3秒后消失),同時(shí)在Log日志區(qū)會(huì)出現(xiàn)相應(yīng)日志

    篡改結(jié)果如上圖Inspectors標(biāo)紅處,可以看到對(duì)http的修改已經(jīng)生效

    ?

    回到頂部

    七:簡單實(shí)踐

    目標(biāo):將baidu首頁的logo替換為google的logo

    我們先找到baidu首頁logo的請(qǐng)求為:https://www.baidu.com/img/bd_logo1.png

    我們?cè)诰W(wǎng)上搜索得到一個(gè)google的logo:https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/220px-Google_2015_logo.svg.png?(如果您無法訪問這個(gè)鏈接,您可以選擇任意一個(gè)其他的圖片url進(jìn)行測(cè)試)

    通過FreeHttp我們有多種方案可以完成目標(biāo)

    1:使用『Request Modific』修改請(qǐng)求url內(nèi)容讓他實(shí)際請(qǐng)求google的logo

    如上圖設(shè)置規(guī)則即可

    效果如圖實(shí)際請(qǐng)求baidu logo的請(qǐng)求實(shí)際被修改為了google的(這些改動(dòng)對(duì)客戶端瀏覽器是不可見的,不過因?yàn)槭菆D片文件所以您在測(cè)試的時(shí)候請(qǐng)注意瀏覽器緩存)

    ?

    2:使用『Response Replace』修改請(qǐng)求重定向到google的鏈接

    如上圖設(shè)置規(guī)則即可(如果您剛剛設(shè)置了對(duì)該圖片鏈接的Request Modific規(guī)則,為了不影響測(cè)試過程請(qǐng)將前面的規(guī)則設(shè)置為不可用)

    ?

    ?

    效果如圖,bd_logo1.png的請(qǐng)求實(shí)際被重定向到了新的地址,同樣實(shí)現(xiàn)了剛剛的效果

    ?

    3:使用『Response Replace』直接替換返回圖片內(nèi)容

    如上圖設(shè)置規(guī)則即可(本地圖片需要提前準(zhǔn)備)

    效果如圖(效果是一樣的實(shí)際原理稍有不同,這次是直接使用本地文件更改的請(qǐng)求響應(yīng))

    ?

    4:使用『Response Modific』修改百度首頁HTML,將圖片元素的地址修改為google的鏈接

    如上圖設(shè)置規(guī)則即可(注意這次不是修改https://www.baidu.com/img/bd_logo1.png的響應(yīng)了,Url Filter匹配的是https://www.baidu.com/)

    效果如圖,可以看到這次百度首頁的HTML的地址直接被修改了,瀏覽器解析到被篡改的url從而請(qǐng)求了錯(cuò)誤的圖片

    ?

    ?

    ?

    回到頂部

    八:參數(shù)化數(shù)據(jù)設(shè)置

    參數(shù)化數(shù)據(jù)的使用可以讓您使用篡改規(guī)則動(dòng)態(tài)的修改http的內(nèi)容,并且支持在http請(qǐng)求或相應(yīng)中捕獲數(shù)據(jù)供篡改規(guī)則使用

    當(dāng)前版本支持以下類型的參數(shù)化數(shù)據(jù) (所有種類的參數(shù)化數(shù)據(jù)可以使用『=』當(dāng)前值,『+』下一個(gè)值,『-』上一個(gè)值這3種方式進(jìn)行取值)

    • Key-Value 這是最直接的參數(shù)類型,僅提供Key Value 功能,一般用于固定常量,或存放從HTTP報(bào)文中捕獲的數(shù)據(jù)
    • Index 該參數(shù)類型提供一種類似索引的功能(您可以設(shè)置它的起始值及范圍,還可以設(shè)置每次取值的進(jìn)步) (the max is 2147483647)
    • LongIndex 該參數(shù)類型與Index類似,不過LongIndex提供了更大的范圍(the max is 9223372036854775807)
    • StringIndex 該參數(shù)與與LongIndex類似,不過它提供一直固定長度的索引(如0001到9999而不是1到9999)
    • Time 該參數(shù)可以讓您以指定格式獲取當(dāng)前時(shí)間
    • Random 該參數(shù)可以讓您以指定格式獲取一個(gè)隨機(jī)字符串/數(shù)
    • List 該參數(shù)提供一組特定列表,如“小紅”,“小黑”,“小花”,您可以使用該參數(shù)依次或隨機(jī)取出設(shè)置的3個(gè)值
    • CSV 該參數(shù)可以讓您直接使用CSV文件中的數(shù)據(jù)

    ?

    8.1 『parameter data manage』參數(shù)化數(shù)據(jù)管理器

    點(diǎn)擊Modific Tool中的parameter data manage 即可彈出如上圖所示參數(shù)化數(shù)據(jù)管理器(在request replace 機(jī)response replace 編輯區(qū)右鍵菜單中add parameter data -> edit data 也可以打開該管理器)

    參數(shù)化數(shù)據(jù)管理器主要用于集中管理您所添加的參數(shù)化數(shù)據(jù)

    ?

    8.1.1參數(shù)化數(shù)據(jù)管理器基本顯示及操作

    如上圖『parameter data manage』主要分如上3個(gè)部分

    1:parameter data manage類別 (點(diǎn)擊不同的類別分類可以進(jìn)行列表切換)

    • KeyValue:包含Key-Value參數(shù)列表
    • Parameter:包含Index,LongIndex,StringIndex,Time,Random,List參數(shù)列表
    • DataSouce:包含CSV參數(shù)列表

    ?

    2:參數(shù)列表

      列表依次顯示參數(shù)的名稱,類別,當(dāng)前值(可能每一次取值都不一樣,列表僅顯示當(dāng)前值)

      您可以通過列表右上方添加刪除按鈕添加刪除參數(shù)

    3:控制當(dāng)前參數(shù)

      您在參數(shù)列表中選擇任意參數(shù),該參數(shù)會(huì)在這里進(jìn)入編輯模式

      該區(qū)依次顯示參數(shù)名稱(不可編輯),當(dāng)前值(可編輯),控制按鈕

      控制選項(xiàng)一共有3個(gè)

    • 編輯當(dāng)前值:點(diǎn)擊該按鈕即為用該區(qū)文本框中的內(nèi)容設(shè)置當(dāng)前參數(shù)(注意并不是任意值都是合法的,如字母“ABC”就對(duì)一個(gè)Index類型的參數(shù)一定不合法)
    • 取下一個(gè)值:獲取當(dāng)前參數(shù)的下一個(gè)值
    • 重置參數(shù):對(duì)當(dāng)前參數(shù)進(jìn)行重置

    ?

    8.1.2添加參數(shù)化數(shù)據(jù)

    如同點(diǎn)擊添加按鈕彈出添加框,依次選擇填寫圖中4處信息即可完成添加

    1:下拉選擇參數(shù)化數(shù)據(jù)類別(大類別)

    2:下拉選擇參數(shù)化數(shù)據(jù)具體類別

    3:填寫您需要添加的參數(shù)化數(shù)據(jù)名稱

    4:填寫您參數(shù)化數(shù)據(jù)的格式要求(當(dāng)您選擇完類別后回顯示格式要求,含義及示例在圖中黃色高亮區(qū)域,以幫助您填寫正確的格式要求)

    填寫完成后點(diǎn)擊添加即可完成添加,下面會(huì)以幾個(gè)例子說明添加過程

    ?

    如上圖填寫每次與值后就添加了個(gè)簡單的Key-Value參數(shù),參數(shù)名為cookie,值為FPkj······

    ?

    如上圖設(shè)置將會(huì)添加一個(gè)名為RandomId,類型為Random的參數(shù)化數(shù)據(jù),該Random參數(shù)為10位長度的數(shù)字

    ?

    ?

    如上圖設(shè)置將會(huì)添加一個(gè)名為timestamp,類型為Time的參數(shù)化數(shù)據(jù),該Time會(huì)提供當(dāng)前毫秒時(shí)間戳

    ?

    如上圖設(shè)置將會(huì)添加一個(gè)名為csv,類型為CSV的參數(shù)化數(shù)據(jù),該參數(shù)使用本地文件D:\mycsv.csv作為數(shù)據(jù)源并以UTF-8讀取數(shù)據(jù)(注意@前綴表示使用絕對(duì)路徑,默認(rèn)沒有@表示相對(duì)路徑,相對(duì)路徑為fiddler安裝根目錄下的FreeHttp文件夾)

    https://docs.microsoft.com/zh-cn/dotnet/api/system.text.encoding?view=netframework-4.7.2?(65001即代表utf8,編碼代碼頁參考)

    注意如果添加CSV類型數(shù)據(jù)后,若再在計(jì)算機(jī)中單獨(dú)在對(duì)改文件直接進(jìn)行編輯后,您需要重新添加該數(shù)據(jù)源才能使您的編輯生效

    ?

    ?

    8.1.3查看編輯導(dǎo)出CSV類型數(shù)據(jù)

    您在任意一個(gè)CSV數(shù)據(jù)類型上雙擊都會(huì)彈出數(shù)據(jù)源顯示/編輯框

    如上圖您可以選則csv表格中的任意數(shù)據(jù)(因?yàn)閷?shí)際CSV參數(shù)取值都是按從左至右從上至下順序取值,所以當(dāng)前游標(biāo)十分重要,打開編輯框被選中的數(shù)據(jù)即是該數(shù)據(jù)源當(dāng)前游標(biāo)位置,通過選擇可以設(shè)置游標(biāo)位置,點(diǎn)擊保存即可生效)

    您同樣可以編輯(雙擊任意項(xiàng)可以進(jìn)行編輯),刪除(選擇行按鍵盤Delete),添加(在尾行直接統(tǒng)計(jì))

    完成編輯后您可以點(diǎn)擊左上角save data圖標(biāo)進(jìn)行保存,或點(diǎn)擊export data將您的數(shù)據(jù)直接導(dǎo)出為文件(CSV參數(shù)里的數(shù)據(jù)可能全部來自HTTP捕獲,所以導(dǎo)出可能對(duì)您十分必要)

    ?

    8.2 在規(guī)則中使用參數(shù)化數(shù)據(jù)

    您在參數(shù)化數(shù)據(jù)管理器中添加的參數(shù)可以在『Request Replsce』,『Response Replace』規(guī)則中直接使用

    ?

    8.2.1 使用插入的方式添加參數(shù)

    如上圖您可以在『Request Replsce』或『Response Replace』編輯區(qū)域鼠標(biāo)右鍵,在右鍵菜單中選擇add Parameter Data ,選擇添加參數(shù)的類別,選擇您要添加的參數(shù)(這里選擇的是剛剛添加的ran2),最后選擇取值方式

    完成選擇后參數(shù)會(huì)自動(dòng)添加到光標(biāo)后方(圖中黃色高亮區(qū)域)

    ?

    8.2.2使用拖拽的方式添加參數(shù)

    如上圖所示您可以在參數(shù)管理器中選擇您需要的參數(shù)直接拖拽到編輯區(qū)的任意地方,同樣會(huì)為您自動(dòng)完成添加(以拖拽添加的參數(shù)的取值方式都是“下一個(gè)”,您可以手動(dòng)修改)

    ?

    8.2.3使用手動(dòng)編輯的方式進(jìn)行添加

    只要按照指定格式*#參數(shù)名稱(取值方式)*#您可以自己手動(dòng)添加參數(shù)

    參數(shù)名稱需要是已經(jīng)存在的參數(shù)名稱

    取值方式默認(rèn)有 下一個(gè)(+),上一個(gè)(-),當(dāng)前值(=) 3種可以使用

    CSV數(shù)據(jù)參數(shù)除支持上面3種默認(rèn)取值方式外還支持使用二維坐標(biāo)系地址取值,比如 *#dtb(0-2)*# 表示取dtb這個(gè)csv數(shù)據(jù)源的第0列,第2行數(shù)據(jù)(以0為起始索引)

    默認(rèn)下一個(gè)取值(+)還支持(+N),表示取后面第N個(gè)值

    ?

    注意:使用手動(dòng)添加參數(shù)后需要手動(dòng)勾選use Parameter Data

    ? ? ? ? ? ?因?yàn)槭褂玫搅藚?shù)化數(shù)據(jù),所以報(bào)文內(nèi)容將在每次規(guī)則執(zhí)行時(shí)動(dòng)態(tài)生成,您可能無法預(yù)測(cè)報(bào)文實(shí)體長度,為此所有使用參數(shù)化數(shù)據(jù)的報(bào)文都會(huì)被自動(dòng)添加正確的Content-Length。如果您在使用參數(shù)的同時(shí)又有意構(gòu)造錯(cuò)誤的Content-Length,請(qǐng)?jiān)偬砑右粭lResponse Modific即可

    ?

    8.3 動(dòng)態(tài)拾取參數(shù)化數(shù)據(jù)

    FreeHttp動(dòng)態(tài)獲取http報(bào)文中的數(shù)據(jù)用于設(shè)置或添加參數(shù)

    如上圖在控制條中有『set parameter pick info』圖標(biāo)(【3.4】節(jié))

    您可以在Http請(qǐng)求報(bào)文,或響應(yīng)報(bào)文中拾取參數(shù),這取決于您當(dāng)前創(chuàng)建的篡改規(guī)則的類型

    點(diǎn)擊圖標(biāo)即可進(jìn)入?yún)?shù)拾取規(guī)則設(shè)置窗口

    如上圖按提示依次填入?yún)?shù)名稱,拾取方式,拾取附加項(xiàng),拾取范圍,拾取表達(dá)式,然后點(diǎn)擊添加或刪除按鈕

    ?

    • 參數(shù)名稱:如果使用的參數(shù)名稱已經(jīng)存在于參數(shù)管理器中,該拾取會(huì)修改當(dāng)前參數(shù)的參數(shù)值(修改實(shí)際都是修改下一個(gè)值,對(duì)Key-Value來說當(dāng)前值與下一個(gè)值都是同一個(gè)值),如果是一個(gè)新的參數(shù)則會(huì)直接添加一個(gè)Key-Value型參數(shù)
    • 拾取方式:當(dāng)前版本支持Regex,XML,String 3種拾取方式
    • 拾取附加項(xiàng):對(duì)拾取方式的附加說明
    • 拾取范圍:無論是請(qǐng)求報(bào)文還是響應(yīng)報(bào)文,都支持以Line請(qǐng)求/響應(yīng)行,Heads 請(qǐng)求/響應(yīng)頭,Entity 請(qǐng)求/響應(yīng)實(shí)體為查找范圍

    ?

    下面以Regex為例(Xml使用Xpath與Regex是類似的),說明參數(shù)拾取規(guī)則的填寫(獲取User-Agent括號(hào)內(nèi)的數(shù)據(jù))

    Parameter Name填寫ua_1,PickType選擇Regex

    PickAdditional選1,1表示取匹配結(jié)果的第一項(xiàng)(因?yàn)镽egex于Xpath匹配都可能是多個(gè)結(jié)果),0表示把多個(gè)結(jié)果以逗號(hào)連接在一起返回,當(dāng)然您可以手動(dòng)填寫2,3,4等索引表示取第N個(gè)價(jià)格

    PickRange 選擇Heads (因?yàn)閁ser-Agent在head頭中)

    Pick Expression 填寫 \(.*?\)

    ?

    如果您對(duì)Regex還不是很熟悉可以直接使用Str(使用Str同樣可以完成大多數(shù)的查找)

    如上圖,選擇PickType為Str,PickAdditional為str-str(str-str:字符串首尾拾取目標(biāo)值,str-len:使用指定字符串開始并指定長度,index-len:以指定索引開始并指定長度,長度填0則表示拾取到最大長度)

    PickRange依然選擇Heads,Pick Expression 填寫 (-)

    ?

    最后如上圖使用str-len獲取請(qǐng)求行中的isBeta參數(shù),完成后點(diǎn)擊確認(rèn)

    ?

    在HTTP請(qǐng)求被匹配命中后,即會(huì)執(zhí)行設(shè)置好的參數(shù)拾取,如上圖參數(shù)已經(jīng)在請(qǐng)求報(bào)文中拾取出來了(注意用Str方式匹配的結(jié)果是不含有首尾字符串的,所以上圖ua_2會(huì)少一個(gè)括號(hào))

    參數(shù)拾取過程也會(huì)被打印在日志區(qū)

    ?

    8.4 參數(shù)化數(shù)據(jù)示例

    目標(biāo):匹配www.test.com/parameter?name=value請(qǐng)求,并返回{"mes":"hello value"}

    其中www.test.com是一個(gè)不存在的域名,value可能是任意字符串 (實(shí)際需求就是對(duì)不存在接口的mock)

    ?

    如下配置即可

    如上圖添加一個(gè)Request Modific規(guī)則,因?yàn)閷?shí)際只需要獲取name名稱不需要對(duì)請(qǐng)求進(jìn)行修改,所以修改區(qū)域不用填寫任何信息(不修改),僅添加一個(gè)參數(shù)拾取規(guī)則即可

    如上圖再添加一個(gè)Response Replace,因?yàn)閷?shí)際接口是不存在的所有必須手動(dòng)替換一個(gè)虛擬的返回,返回body中使用到了請(qǐng)求將會(huì)獲取的testName參數(shù)(注意勾選Response Direct)

    完成添加后,設(shè)置剛剛添加的2個(gè)規(guī)則生效。

    ?

    ?

    如上圖,您在使用瀏覽器(對(duì)使用fiddler代理的任何設(shè)備任何客戶端都生效)訪問http://www.test.com/parameter?name=tom

    可以看到這個(gè)并不存在的接口已經(jīng)按預(yù)期返回了數(shù)據(jù),并且成功取出了name

    ?

    ?

    ?

    回到頂部

    實(shí)現(xiàn)及源碼

    完整工程源碼:?https://github.com/lulianqi/FreeHttp/

    Fiddler 擴(kuò)展插件開發(fā)環(huán)境配置 請(qǐng)參考官方文檔?https://docs.telerik.com/fiddler/Extend-Fiddler/ExtendWithDotNet?(該文檔已經(jīng)詳細(xì)說明了搭建及調(diào)試項(xiàng)目的過程)

    Fiddler 對(duì)外開放接口可以參見《Lulu.Debugging with Fiddler》(書中不僅介紹Fiddler的起源,還纖細(xì)介紹了Fiddler的使用,其中就包括對(duì)外提供的擴(kuò)展接口)

    ?

    當(dāng)前FreeHttp擴(kuò)展插件開發(fā)使用.net framework 版本為4.5(您在配置開發(fā)環(huán)境時(shí)需要注意您調(diào)試引用的Fiddler 的版本,及您開發(fā)環(huán)境所支持的最高版本)

    ?

    基本基本結(jié)構(gòu)如下圖

    ?

    ?

    下載工程并加載成功后您可以看到如上圖的基本結(jié)構(gòu)

    以下是圖中主要命名空間的功能概述

    • 1:AutoTest命名空間主要提供參數(shù)化數(shù)據(jù)的拾取及管理
    • 2:FiddlerHelper命名空間 提供與Fiddler篡改直接相關(guān)的功能
    • 3:FreeHttpControl命名空間提供UI界面及窗體操作邏輯
    • 4:HttpHelper命名空間提供對(duì)HTTP協(xié)議報(bào)文處理的功能
    • 5:MyHelper 命名空間提供公共的輔助工具
    • 6:WebService命名空間提供使網(wǎng)絡(luò)服務(wù)的功能
    • 7:FiddlerFreeHttp繼承至IAutoTamper,他是與FIddler數(shù)據(jù)交換的入口? ,?FiddlerSessionTamper是FiddlerFreeHttp的工具類

    ?

    總結(jié)

    以上是生活随笔為你收集整理的【Fiddler篇】FreeHttp无限篡改http报文数据调试和mock服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。