引言

FreeHttp是一個Fiddler外掛藉助FreeHttp您可按照您自己的設定修改請求或響應報文,這對測試及除錯都非常有用

比如您發現線上頁面js檔案錯誤,直接使用規則替換新的js檔案您可以在不對線上服務做任何改動的情況下直接在線上驗證

同樣在發現服務介面資料不符合預期時也可以直接修改驗證,甚至可以清除手機瀏覽器或微信服務號的登陸狀態

希望在您瞭解其基本功能及工作原理後,可以在實際工作中為您提供便利

FreeHttp起源

如今網際網路或IT行業幾乎跟HTTP已經分不開了,系統與系統之間的聯絡相當一部分都需要藉助HTTP,在平時的工作中(特別是測試工作)漸漸的會發現自己除了對抓取HTTP報文有需求,很多時候更需要篡改HTTP報文輔助測試或除錯。

Fiddler實際已經提供斷點,AutoResponder及FiddlerScript 功能可以直接或間接實現報文篡改功能,不過使用過程中會發現,他們在很多情況下操作難度較大限制也多,甚至有些情況達不到我的需求。

為了滿足自己的一些特定需求,藉助Fiddler擴充套件介面自己慢慢為其編寫開發了外掛,後來隨著工作需要為外掛新增的功能越來越多,自己就萌生了把功能實現成通用的形式或許可以給其他同學提供幫助(也就成為了FreeHttp的雛形)

之後利用業餘時間逐步整理實現了當前版本的功能,由於時間以及水平方面的限制,相信FreeHttp依然存在許多缺陷及不足的地方,也希望大家能多包涵。發現問題可以直接提出,我會盡快修復,希望能為大家的工作提供便利。

藉助FreeHttp篡改http報文 (使用·實現)

FreeHttp篡改http報文的基本實現過程如上圖(綠線代表http請求,黃線代表http響應)

FreeHttp獲取請求及響應需要依賴fiddler代理,也就是說只要連線fiddler代理的終端裝置的http請求報文都可以被FreeHttp篡改,同樣支援對https的篡改(當遇到http2。0請求時會先降級到http1。1,再進行報文篡改)

FreeHttp 外掛安裝

1:您的計算機需要已經安裝Fiddler (如未安裝,請至官網下載安裝

http://

docs。telerik。com/fiddle

r/configure-fiddler/tasks/configurefiddler

2:進入Fiddler安裝目錄的Scripts目錄下,將FreeHttp。dll複製到該目錄下即可 (檔案下載請至:

https://

files。cnblogs。com/files

/lulianqi/FreeHttp1。2。zip

http://

lulianqi。com/file/FreeH

ttp1。2。zip

解壓可得到 FreeHttp。dll )

3:重啟Fiddler即可在面板中出現 FreeHttp 標籤

備註: 由於本文篇幅較長,如果您當前時間不充裕或暫時不打算檢視 FreeHttp的詳細功能,建議您直接閱讀第6章節【六:快速入門】,第7章節【七:簡單實踐】(這2章節有可以幫您快速瞭解FreeHttp的基本功能)

如果您對FreeHttp的程式碼實現感興趣,或您打算修改FreeHttp的功能,您可以在末尾章節【實現及原始碼】找到相關內容(原始碼地址及工程結構簡介)

FreeHttp 基本介面

基本操作介面如下圖,主要分為5個部分

藉助FreeHttp篡改http報文 (使用·實現)

Session 匹配規則編輯區『Url Filter』

Htpp 請求或響應篡改規則編輯區

規則編輯控制條

http session 捕獲/篡改或規則執行日誌

已建立http篡改規則列表

當請求發出或接收到響應時,freehttp會在篡改規則列表中匹配篡改規則(匹配使用Url Filter中的內容),如果匹配成功即執行http報文的篡改(篡改使用規則編輯區內容)

藉助FreeHttp篡改http報文 (使用·實現)

如上圖您可以簡單調整各顯示區域的佈局

一:規則匹配區

藉助FreeHttp篡改http報文 (使用·實現)

1。1:『get http sesion in left session list』獲取Session資訊

表示從fiddler Session列表獲取Session資訊

點選此圖示會將您選中的session的url自動填充到urlfilter輸入框中, 並將該session的request及response資訊填入下方Http篡改規則的『Request Replace』及『Response Replace』中方便篡改規則的編輯

藉助FreeHttp篡改http報文 (使用·實現)

(如上圖:選擇fiddler預設更新session,點選獲取按鈕,黃色區域即為獲取的資訊)

1。2:『select url filter method』Url匹配方式

表示url匹配方式(匹配後方文字框中內容),支援Contain,StartWith,Is,Regex,AllPass

Contion:在當前Http請求session url包含指定值時匹配透過。

StartWith:在當前Http請求session url以指定值開始時匹配透過。

Is:在當前Http請求session url與指定值完全一致時匹配透過。

Regex:在當前Http請求session url 透過指定正則匹配時匹配透過。(如[“^

https://www。

bing。cn/js/page

。\S*?。js\b”該正則匹配表示以“

https://www。

bing。cn/js/page

。”開頭並以“。js”結尾並且中間含隨機版本的js請求url)

AllPass:對任意Http請求session url匹配透過。(當您需要為所有透過fiddler的請求都進行指定規則的篡改時,比如為所有請求新增標記head頭,或設定禁用驗證快取時可能會需要使用到AllPass匹配方式)

藉助FreeHttp篡改http報文 (使用·實現)

藉助FreeHttp篡改http報文 (使用·實現)

(如上圖:當滑鼠懸停該區域,會有匹配方式提示出現)

1。3:『edit advanced http filter』高階匹配

點選此圖示可以進行http篡改匹配規則的高階匹配

包括對request 對請求頭及請求實體的匹配檢查

藉助FreeHttp篡改http報文 (使用·實現)

如果前面的Url Filter 選項已經能幫助您篩選目標http請求,您不用再設定該項

預設狀態下『edit advanced http filter』圖示顯示為黑色,表示沒有對advanced http filter進行過設定

如果您對當前匹配規則的advanced http filter已經進行過設定,該圖示會顯示為藍色

點選該圖示即可在彈出視窗中設定 advanced http filter

藉助FreeHttp篡改http報文 (使用·實現)

如上圖 advanced http filter分為4部分

1:Url Filter 部分內容與前面的Url Filter 完全一致(這裡不在單獨說明)

2:Head Filter 部分可以幫你設定head頭篩選,點選『+』彈出操作框按提示輸入Key於Value(表示被匹配http請求必須滿足,請求頭中必須含有Key值請求頭,並且該請求頭的內容必須含有Value值)

點選目標控制區域『+』彈出新增對話方塊進行新增

點選目標控制區域『-』 可以刪除已經新增但不再需要的規則(不選擇任何指定item則移除當前所有)

雙擊任意條目彈出編輯框可以對已經新增條目進行編輯操作

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

4:Rule Alias 部分用於設定該規則的別名 (該別名會顯示在後面 『Tamper Rule』篡改規則列表區)

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

1。4:『new or edit rule』建立規則

在建立模式確認建立新規則

在編輯模式確認儲存當前規則

該按鈕與下方『規則編輯控制條』中確認按鈕意義一致

藉助FreeHttp篡改http報文 (使用·實現)

二:請求或響應篡改規則編輯區域

藉助FreeHttp篡改http報文 (使用·實現)

HTTP篡改區有4個tab分別是 請求修改『Request Modific』;請求替換『Request Replsce』;響應修改『Response Modific』;響應替換『Response Replace』

透過設定這4類篡改規則您幾乎可以對指定Http請求的request或response進行任意的篡改,使它變為您需要的樣子

篡改還包括對檔案及動態引數化及外部檔案資料來源的支援

2。1:『Request Modific』請求修改

藉助FreeHttp篡改http報文 (使用·實現)

『Request Modific』可以完成對http請求的篡改,請求修改按HTTP自身結構分為4塊

分別是對請求url的修改,對請求頭的移除,對請求頭的新增,對請求實體的修改

2。1。1:請求行uri 修改 『Uri Modofic』

該編輯區用於控制修改匹配http request的url

不輸入任何值,則代表不修改該項

第一個文字框輸入需要替換的內容,第二個文字框輸入替換之後的內容

注意:該替換規則將替換目標中所有匹配字串(如果發現多處匹配,將都被替換)

如果第一個文字框置空,僅在第二個文字框中輸入內容,則代表替換請求行的整個uri

如請求行是 GET

https://www。

fiddler2。com/UpdateChec

k。aspx?isBeta=False

HTTP/1。1 ,在第一個文字框中輸入“”(置空不輸入),在第二個文字框中輸入“

http://

test。com

如果請求『Url Filter』規則匹配,請求在傳送前請求行將被篡改為 GET

http://

test。com

HTTP/1。1

藉助FreeHttp篡改http報文 (使用·實現)

如上圖,在第一個文字框中輸入“isBeta=False”,在第二個文字框中輸入“isBeta=true”

如果請求『Url Filter』規則匹配,若請求行是 GET

https://www。

fiddler2。com/UpdateChec

k。aspx?isBeta=False

HTTP/1。1 ,則Url Modific執行(因為url含有“isBeta=False”),請求在發出前,請求行將被篡改為 GET

https://www。

fiddler2。com/UpdateChec

k。aspx?isBeta=true

HTTP/1。1

2。1。2:請求頭heads移除『Head Modific』『Remove Head』

該編輯區用於控制修改匹配http request的head頭,刪除指定request head頭

點選目標控制區域『+』彈出新增對話方塊進行新增

點選目標控制區域『-』 可以刪除已經新增但不再需要的head移除規則(不選擇任何指定item則移除當前所有)

雙擊任意條目彈出編輯框可以對已經新增條目進行編輯操作

藉助FreeHttp篡改http報文 (使用·實現)

(如上圖點選新增,彈出視窗進行新增,或雙擊任意item彈出該視窗進行編輯)

以上『Remove Head』設定表示移除請求頭中的Pragram,Cache-Contorl,If-None-Match,If-Modified-Since請求頭

2。1。3:請求頭heads新增『Head Modific』『Add Head』

該編輯區用於控制修改匹配http request的head頭,新增指定request head頭

點選目標控制區域『+』彈出新增對話方塊進行新增

點選目標控制區域『-』 可以刪除已經新增但不再需要的head新增規則(不選擇任何指定item則移除當前所有)

雙擊任意條目彈出編輯框可以對已經新增條目進行編輯操作

藉助FreeHttp篡改http報文 (使用·實現)

(如上圖點選新增彈出視窗進行新增,或雙擊任意item彈出該視窗進行編輯)

以上『Add Head』設定表示新增請求頭請求頭Pragma: no-cache , Cache-Control: no-cache (因為在『Remove Head』中也有Pragme請求頭,所以實際含義是修改Pragme請求頭為no-cache)

2。1。3備註

關於『Remove Head』

因為[email protected] 請求頭中頭域名稱不區分大小寫,所以host與hoST的意義是一樣的,一旦規則匹配將會移除請求頭中的host頭

關於『Add Head』

新增請求頭允許新增2個同名域頭,比如您可以同時新增Accept-Encoding: gzip 和Accept-Encoding: deflate 這2個頭會分別新增到請求頭域(即使使用一樣的頭域名稱)

注意由於同名頭域並不會相互覆蓋,所以如果你想實現指定請求頭的修改功能,需要先刪除指定頭域,再新增該頭域

比如您需要將Pragma:xxx 改為Pragma: no-cache,就需要先新增一個Remove Head測試規則Pragma,然後新增一個頭域修改規則Pragma: no-cache

關於請求或響應篡改規則編輯區域其他類似『Add Head』的操作規則

基本操作邏輯維持一致

點選『+』新增項

點選『-』刪除選定項(未選定任何項刪除全部)

雙擊任意項為編輯該項

2。1。4:請求體Body修改『Body Modific』

如果您的請求中含有Body,您可能也會有對請求體body的修改的需求

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

不輸入任何值,則代表不修改該項

第一個文字框輸入需要替換的內容,第二個文字框輸入替換之後的內容

當第一個文字框以開頭時則表示啟用正則替換,後面的內容為查詢替換的的正則表示式

如第一個文字框中輸入“nloginpwd=。*?&”(不包含引號),第二個文字框中輸入“nloginpwd=123456&”

該正則替換規則表示將請求體Body中所有以“nloginpwd=”開頭,以“&”結尾的文字替換為“nloginpwd=123456”

藉助FreeHttp篡改http報文 (使用·實現)

如上圖,在第一個文字框置空,在第二個文字框中輸入“test”

如果請求『Url Filter』規則匹配,Http請求body將被替換為“test body”

注意這種設定即使原始body為空也會進行替換(實際上GET等請求是不含有請求實體的,此處僅為演示)

2。2:『Request Replace』請求替換

藉助FreeHttp篡改http報文 (使用·實現)

『Request Replace』可以完成對http請求的整體替換

Request Replace是http請求的另一種篡改模式,他不關心匹配請求的原始request內容,直接對整個請求做替換操作

Request Replace 對替換規則的編輯分為兩種方式,輔助模式及Raw模式

為了方便您建立替換規則,『Request Replace』按http請求結構分為3部分,請求行,請求頭請求體,及Raw描述切換(不使用格式輔助,進入Raw編輯進行編輯)

2。2。1 『Start Line』編輯替換請求行

請求行的編輯按請求行的規則分為

對請求方法的編輯(可以進行下拉輔助編輯,或手動輸入自定義方法)

對url的編輯(注意請保持url的完整性)

對http協議版本的編輯(可以進行下拉輔助編輯,或手動輸入自定義方法)

藉助FreeHttp篡改http報文 (使用·實現)

2。2。2 『Request Heads』編輯替換請求頭

請求替換中對請求頭的編輯與【2。1。3】中設定請求頭類似,使用同樣的方式進行配置編輯(此處不再重複說明)

此處的請求頭將與上面『Start Line』一起用於整體替換

藉助FreeHttp篡改http報文 (使用·實現)

2。2。3 『Request Body』編輯替換請求體

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

如果您的body正文是二進位制的資料,或是一個需要上傳的檔案,您可以直接在此處新增本地檔案

藉助FreeHttp篡改http報文 (使用·實現)

編輯框單機滑鼠右鍵,在彈出選單中選擇『add file』

選擇計算機中本地檔案檔案

藉助FreeHttp篡改http報文 (使用·實現)

如上圖選擇檔案後“<>C:\Users\administer\Pictures\3613e290-8028-4ddc-946c-b89c67f4f31a。jpg”將會被新增至編輯框

表示3613e290-8028-4ddc-946c-b89c67f4f31a。jpg該檔案將直接作為request的請求實體進行替換

您也可以按照格式約定手動新增檔案(以“<>”開頭,後接檔案路徑)

注意:只有以<>開頭才表示檔案模式(“data<>C:\test。jpg”這種資料將不會被當作檔案處理)

關於『add Parameter』新增引數化資料

您可以在您需要的任意地方右鍵選擇『add Parameter』新增您想要的靜態化資料

詳細使用方法請檢視【八:引數化資料設定】(不瞭解引數化資料的設定並不會影響您使用freehttp的主要功能)

2。2。4 『Raw Mode』切換原始資料檢視

如果您熟悉Http原始報文,您可以點選下圖中的圖示進入raw mode,對將要替換的原始報文進行編輯

藉助FreeHttp篡改http報文 (使用·實現)

藉助FreeHttp篡改http報文 (使用·實現)

進入raw mode可以直接編輯(如果您使用『get http sesion in left session list』獲取過session資訊,這裡會提前填入目標http的request報文方便您的編輯)

您不用擔心您輸入的錯誤的http格式會影響替換,如果使用『raw mode』在您編輯或新增完成時,系統會檢查你的輸入,如果格式有誤,會給出明確提示告訴您什麼地方不符合標準規範(標準規範請參見RFC2616)

藉助FreeHttp篡改http報文 (使用·實現)

raw mode 支援上文request replace的全部功能,包括【八:引數化資料設定】會介紹的引數化資料

在raw mode您同樣可以使用檔案替換request body,替換方式與【2。2。3】中的問題替換基本維持一致

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

藉助FreeHttp篡改http報文 (使用·實現)

如上圖如果您已經有body 內容為test data,則不能同時新增檔案body

2。2。4備註

在右鍵新增檔案時,同時可以看到右鍵選單中有『anto Content-Length』,如果勾選該項在你建立或儲存當前規則時會自動計算Body長度併為請求新增Content-Length頭。

在你點選建立或儲存按鈕時,『Request Replace』Tab當前停在raw mode模式 即儲存raw mode 資料,停在輔助模式則使用輔助模式的資料

2。3:『Response Modific』響應修改

藉助FreeHttp篡改http報文 (使用·實現)

『Response Modific』可以完成對http響應的任意篡改,請求修改按HTTP自身結構分為3塊,分別是對響應頭的移除,對請響應的新增,對響應實體的修改

『Response Modific』的編輯及執行模式與『Response Modific』基本維持一致,不同的是在『Response Modific』不能對響應行及響應狀態碼進行篡改(因為對狀態碼的修改意味著對整個響應的完全修改,如果需要修改狀態碼請使用後面的『Response Replace』)

2。3。1:響應頭heads移除『Head Modific』『Remove Head』

該編輯區用於控制修改匹配http response的head頭,刪除指定response head頭

該項編輯邏輯與【2。1。2】中對請求頭的移除是一致的,這裡不再重複說明

2。3。2:響應頭heads新增『Head Modific』『Add Head』

該編輯區用於控制修改匹配http response的head頭,新增指定response head頭

該項編輯邏輯與【2。1。3】中對請求頭的新增是一致的,這裡不再重複說明

2。3。3:響應體Body修改『Body Modific』

如果您的響應中含有body,您可能也會有對響應body的修改的需求

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

該項編輯邏輯與【2。1。4】中對請體的修改是一致的,這裡不再重複說明

藉助FreeHttp篡改http報文 (使用·實現)

如上圖設定則表示為匹配的http響應新增一個Set-Cookie頭,內容為UM_distinctid=167,當瀏覽器接收到這個被篡改過的響應頭後,會為該域名新增名為UM_distinctid的cookie,如果已有同名cookie則會直接覆蓋

2。4:『Response Replace』響應替換

藉助FreeHttp篡改http報文 (使用·實現)

『Response Replace』可以完成對http響應的整體替換

Response Replace是http響應的另一種篡改模式,他不關心匹配請求的原始response內容,直接對整個響應做替換操作

Response Replace 對響應的替換直接使用Raw模式,不過為了方便替換提供了一組標準響應返回的模板

Response Replace 按編輯功能分為3部分,響應Raw內容編輯,模板選擇,Response Direct選擇

2。4。1 響應Raw原始報文編輯

在此Tab可以直接編輯替換用的Raw原始報文(如果您使用『get http sesion in left session list』獲取過session資訊,這裡會提前填入目標http的response報文方便您的編輯)

您不用擔心您輸入的錯誤的http格式會影響替換,如果使用『response replace』在您儲存或新建時系統會檢查你的輸入,並給出明確提示告訴您什麼地方不符合標準規範(標準規範請參見RFC2616)

藉助FreeHttp篡改http報文 (使用·實現)

與【2。2。4】 請求『Raw Mode』替換一樣,支援檔案及引數化資料,除報文要求的格式外,其他編輯邏輯與【2。2。4】中規則維持一致,此處不再重複說明

2。4。2『Select Replace Template』選擇模板

如果您需要自己建立response響應內容,您可以使用模板輔助您的編輯,模板包含大多數常規響應的基本格式

藉助FreeHttp篡改http報文 (使用·實現)

如上圖下拉選擇您想要的模板即可,上圖中選擇了[HTTP/1。1 200 OK]的模板,模板內容即是一個常規Http 200 返回的例子,您可以直接在例子上進行修改

2。4。3『Response Direct』直接返回響應

該選項用於控制response返回時機,當『Url Filter』匹配到http請求後,同時該篡改規則為『Response Replace』時,可以使用該項設定請求是否直接返回

藉助FreeHttp篡改http報文 (使用·實現)

當『Response Direct』被勾選選時,feddler將不會把請求傳送到目標伺服器,而是使用Response Replace裡的resonse直接返回,即客戶端傳送請求後就會立即接收到您自定義的響應,這種模式對於實際請求是不存在的或暫時不能連通的情況是十分必要(比如您想要使用暫時未開發好的介面,這時就需要該選項mock介面),同時您可以設定介面的執行時間在後面【3。3】『set response latency』 會介紹如何為響應設定指定響應時間

當『Response Direct』未被勾選時,則使用常規請求路徑,請求會被髮送至伺服器(即使服務的返回並不會被使用),在服務返回響應結果後,執行替換操作 (預設不勾選)

三:規則編輯控制條及常規設定編輯區域

藉助FreeHttp篡改http報文 (使用·實現)

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

3。1『affirm rule』確認建立規則或儲存規則修改

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

在建立模式確認建立新規則

在編輯模式確認儲存當前規則

藉助FreeHttp篡改http報文 (使用·實現)

如上圖當年點選確認(黃色標記區域)時,即會建立能編輯的篡改規則

請注意上方『url Filter』右側文字提示(New Mode 表示現在處於建立模式)會顯示當前模式

還有一點需要說明當前篡改規則編輯區域停留在哪種編輯模式,即是對哪種規則的儲存(『Request Modific』『Request Replsce』『Response Modific』『Response Replace』)

單個規則僅包含一種篡改規則,如果您需要對同一個請求同時執行多個篡改,您可以對其建立多個篡改規則(實際應用中這種場景是存在的)

如果當前建立的規則是『Request Modific』或『Request Replsce』,建立完成的規則會出現在『Request Rule』列表中,如果是『Response Modific』或『Response Replace』,建立完成則會出現在『Response Rule』中

完成建立後,下方日誌會有相應記錄,並清空當前編輯區域(圖中編輯區域沒有清空僅為演示,實際使用中編輯區資料將完全被清除)

當您點選確認時系統會檢查您編輯的規則,如果有不符合要求的地方會有相應提示,並在出現錯誤的編輯的區域進行短時間的高亮顯示以提示 (通常如果是新規則會在新增在規則類表末尾,並有短時間高亮顯示進行提示)

3。2『cancel edit』取消

藉助FreeHttp篡改http報文 (使用·實現)

『cancel edit』功能相對簡單,僅用於清除編輯區域儲存的資訊

在建立模式直接清除資訊,在編輯模式可以取消對當前規則的編輯狀態

3。3『set response latency』 設定響應延時

藉助FreeHttp篡改http報文 (使用·實現)

『set response latency』可用於設定『Response Rule』的響應延遲(『Response Modific』及『Response Replace』為『Response Rule』)

如上圖該圖示按鈕有3種狀態(can set , unable set,is seted)

1。can set:延時設定對當前篡改規則為可設定狀態,此時點選該圖示即彈出設定框。

2。unable set :延時設定對當前篡改規則為不可設定狀態,此時該圖示不能點選,因為響應延時是針對http response的延時,即該設定對『Request Modific』『Request Replsce』是無效的

3。is seted:第3種狀態是已經設定過延時的情況,如圖設定過數值將會直接顯示在剛剛圖示的位置。(這個時候也可以點選該數值進行修改)

藉助FreeHttp篡改http報文 (使用·實現)

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

3。4『set parameter pick info』設定引數化資料獲取規則

藉助FreeHttp篡改http報文 (使用·實現)

『set parameter pick info』用於在原始請求或響應中捕獲初始化資料(對現有引數化資料做新增或修改操作)

該圖示有2種狀態含義分別是

1:該篡改規則未設定任何引數捕獲規則

2:該篡改規則至少已經設定一條引數捕獲規則

這兩種狀態下都可以點選圖示直接進入編輯框,如果已經有設定過的規則,已有規則會在編輯框中直接載入

詳細使用方法請檢視【八:引數化資料設定】(不瞭解引數化資料的設定並不會影響您使用freehttp的主要功能)

3。5『Quick Rule』快速規則

藉助FreeHttp篡改http報文 (使用·實現)

當前版本共有6個快速規則,幫助您快速完成篡改規則的設定

3。5。1『disable cache』禁止快取

該quick rule針對Request Modific,可以為匹配規則的請求去除條件快取並強制伺服器不要使用快取

藉助FreeHttp篡改http報文 (使用·實現)

如上圖使用該quick rule後會在『Request Modific』中『Head Modific』直接新增預設的值,這時您直接點選確認即可用快速完成一個Request Rule的建立

3。5。2『add cookie 』新增請求Cookie

該quick rule針對Request Modific,可以為匹配規則的請求新增指定cookie

藉助FreeHttp篡改http報文 (使用·實現)

選擇項後彈出如上圖對話方塊,直接輸入您需要設定的cookie即可,(注意cookie的格式 key=value )

3。5。3『delete cookie』刪除客戶端Cookie

該quick rule針對Response Modific,可以為匹配規則的響應新增Set-Cookie(透過設定指定cookie立即過期,從而實現刪除客戶端cookie的功能)

藉助FreeHttp篡改http報文 (使用·實現)

選擇項後彈出如上圖對話方塊,在Name處輸入你想要刪除cookie的名稱(同時為了讓瀏覽器準確定位到您要刪除的cookie,你還需要注意修改Domain及Path為正確的值,一般情況下Domain為當前網站域名,Path為/)

3。5。4『set client cookie』設定客戶端Cookie

該quick rule針對Response Modific,可以為匹配規則的響應新增指定Set-Cookie,設定客戶端cookie (這裡是透過Set-Cookie完成對客戶端cookie的效果,比如在手機瀏覽器,或某些軟體的內建web瀏覽器並沒有提供除錯模式,這個時候Set-Cookie將是不錯的解決方案)

藉助FreeHttp篡改http報文 (使用·實現)

選擇項後彈出如上圖對話方塊,按提示輸入指定值即可

3。5。5『copy session cookies』複製Cookies

該quick rule針對針對Response Modific,可以快速將指定session的所有cookies快速的設定到客戶端另一個域下(該功能可以讓您在多個瀏覽器,甚至多個裝置,多個域名下共享同一份cookie,這在除錯或測試中跳過授權會非常有效)

藉助FreeHttp篡改http報文 (使用·實現)

如上圖要使用該功能,您需要先在Filddler左側Session列表選擇您需要複製cookies的源請求(圖中選擇的是

http://

github。com/lulianqi/Fre

eHttp

),選中指定session後點擊copy session cookies即可以看到在Heads Modific的Add Head編輯框自動添加了來自github的cookie資訊(該規則會為匹配的請求新增Set-Cookies從而達到複製效果)

3。5。6『add UserAgent』新增UserAgent

該quick rule針對Request Modific,可以為匹配規則的請求新增指定UserAgent

藉助FreeHttp篡改http報文 (使用·實現)

如上圖該項相對簡單,直接填入您需要的UserAgent即可

3。6『Modific Tool』篡改工具及常規設定

藉助FreeHttp篡改http報文 (使用·實現)

當前版本共有4個工具項,方便您的使用或提供其他設定功能

3。6。1『show selected session stream』顯示session流資訊

該工具可以將您選擇的session以RAW的模式顯示在一個新的視窗(該視窗一直頂層顯示,但不影響您在主視窗下的操作),您在建立篡改規則的同時可以使用該視窗檢視session資訊而不用切換Tab(您也可以直接在session列表中選中session拖動到編輯區域,raw形式的報文同樣會顯示在日誌區,但不會開啟新的視窗 )

藉助FreeHttp篡改http報文 (使用·實現)

如上圖在fiddler左側session列表選擇任意請求,點選show selected session stream將會彈出新的獨立視窗以顯示您選擇的session的原始報文

3。6。2『http tamper setting』基本設定

該項提供一些對FreeHttp外掛的基本設定

藉助FreeHttp篡改http報文 (使用·實現)

is only match fist tamper rule: (預設是)是否僅執行第一個匹配成功的篡改規則(因為您可以對同一個請求有多個篡改規則,您可以透過此選項控制是否能對一個http報文執行多個匹配規則篡改規則)

is skip tls handshake:(預設是)是否跳過對TLS握手包進行匹配(除非您需要除錯TLS握手,建議您維持預設設定)

is default enable tamper rule:(預設否)是否預設啟用規則匹配(在『Request Rule』及『Response Rule』都有獨立啟用開關,該選項用於控制軟體啟動時的預設狀態)

3。6。3『parameter data manage』引數化資料管理器

該項提供對FreeHttp的引數化資料的集中管理

藉助FreeHttp篡改http報文 (使用·實現)

選擇該項後彈出層管理器視窗,您可以在管理器中對引數進行新增,修改,除錯等操作

後面【八:引數化資料設定】會詳細介紹引數化資料的使用,這裡暫不具體說明

3。6。4『issues and suggest』

點選該選會使用您的預設瀏覽器開啟問題提交頁,您可以在該頁提交您的問題及意見(在此處提交問題可能需要您擁有github帳號,如果不方便登入可以直接傳送郵件至[email protected]。com提交您的問題及建議)

四:『Execution Log』執行日誌

藉助FreeHttp篡改http報文 (使用·實現)

該區域僅對篡改規則的操作及執行日誌進行顯示

日誌統一格式以資料開頭,並用顏色區分錯誤,提示及資訊日誌

五:『Tamper Rule』篡改規則列表

藉助FreeHttp篡改http報文 (使用·實現)

『Tamper Rule』篡改規則主要集中顯示及管理您已經建立的規則,您可以在這裡設定需要生效的規則,刪除或修改已有規則,對規則排序等操作

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

上部列表為『Request Rule』請求篡改規則(由『Request Modific』,以編輯圖示顯示及『Request Replsce』以替換圖示顯示組成)

下部列表為『Request Rule』響應篡改規則(由『Response Modific』,以編輯圖示顯示及『Response Replace』,以替換圖示顯示組成)

5。1 Tamper Rule控制選項

藉助FreeHttp篡改http報文 (使用·實現)

Tamper Rule控制選項主要由2部分組成

位於右上角的控制欄,從左至右分別是『+』新增,『-』刪除,『啟用』控制

點選新增:編輯面板會直接切換至『Request Modific』提示您進行編輯(如果是在『Response Rule』上點選新增編輯面板則會切換至『Response Modific』)

點選刪除:刪除選中Rule,如果沒有選擇任何Rule則會向您詢問是否刪除全部Rule

啟用控制:Request Rule與Response Rule的啟用控制是獨立的,您可以分別設定他們的啟用狀態,只有當您選擇啟用後,Fillder才會匹配列表中處於Checked狀態的規則,匹配命中後執行規則(您可以設定啟動時直接啟用,詳見【3。6。2】『http tamper setting』)

在篡改規則列表區任意位置右鍵可提出Rule控制選單

remove selected rule 刪除選定規則

remove all rule 刪除所有規則

enable this rule 生效指定規則

enable all rule 生效所有規則

unable all rule 讓所有規則不生效

edit this rule 編輯當前規則

5。2 Tamper Rule資訊顯示

藉助FreeHttp篡改http報文 (使用·實現)

如上圖您建立的規則都會顯示在Tamper Rule列表裡,每條規則在列表處顯示資訊依次有如下4項

1:是否進行匹配複選框(如果您想要篡改規則生效,除了要設定『啟用』控制,還需要將此處設定為勾選狀態)

2:替換/編輯圖示,該處僅顯示一個圖標表示當前篡改規則是一個編輯規則還是替換規則

3:當前篡改規則的的序號,注意該序號是自動生成的唯一序號,在您對規則做新增或刪除操作時會重新生成每條規則的序號

4:規則名稱,如果您沒有設定規則別名這裡會直接顯示匹配url的方式加匹配url值(別名的設定請參考【1。3】『edit advanced http filter』)

藉助FreeHttp篡改http報文 (使用·實現)

如上圖,當您將滑鼠移至rule圖示處,會顯示規則匹配的詳細內容(僅顯示匹配資訊,不顯示篡改詳情)

上圖規則表示當請求同時滿足 以下規則

1:請求url 必須等於“

https://www。

fiddler2。com/UpdateChec

k。aspx?isBeta=False

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

3:請求Body必須含有上圖指定字串

5。3 Rule的編輯及排序

藉助FreeHttp篡改http報文 (使用·實現)

如上圖您在rule列表對任意篡改規則進行雙擊則進入編輯模式,對當前規則進行編輯

處於編輯模式的rule在列表處以紅色背景展示,在圖中紅線出也顯示了當前編輯面板的狀態

請注意編輯完成後務必點選儲存使更改生效(儲存成功後當前rule規則特殊背景色會消失)

如果您想放棄修改請點選取消(詳見:【3。2】『cancel edit』取消)

藉助FreeHttp篡改http報文 (使用·實現)

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

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

六:快速入門

這裡向您演示如何快速建立一個規則,並完成對http請求或響應的修改

https://www。

fiddler2。com/UpdateChec

k。aspx?isBeta=False

為例(該請求實際為fillder更新檢查的請求)

假設我們希望修改url中isBeta的值為ture,並將Connection:頭修改為Keep-Alive

藉助FreeHttp篡改http報文 (使用·實現)

您只需要在填入如上圖所示資訊,點選右下角確認

藉助FreeHttp篡改http報文 (使用·實現)

如上圖設定開啟規則匹配並勾選您需要參與匹配的規則(圖中序號為6的的請求即是我們剛剛建立的規則)

藉助FreeHttp篡改http報文 (使用·實現)

當系統匹配到http請求後,會將fiddler左側session列表中被匹配中session,及右側rule列表被匹配中規則同時以淺黃色高亮提示(rule列表處高亮提示將在2-3秒後消失),同時在Log日誌區會出現相應日誌

藉助FreeHttp篡改http報文 (使用·實現)

篡改結果如上圖Inspectors標紅處,可以看到對http的修改已經生效

七:簡單實踐

目標:將baidu首頁的logo替換為google的logo

我們先找到baidu首頁logo的請求為:

https://www。

baidu。com/img/bd_logo1。

png

我們在網上搜索得到一個google的logo:

https://

upload。wikimedia。org/wi

kipedia/commons/thumb/2/2f/Google_2015_logo。svg/220px-Google_2015_logo。svg。png

(如果您無法訪問這個連結,您可以選擇任意一個其他的圖片url進行測試)

透過FreeHttp我們有多種方案可以完成目標

1:使用『Request Modific』修改請求url內容讓他實際請求google的logo

藉助FreeHttp篡改http報文 (使用·實現)

如上圖設定規則即可

藉助FreeHttp篡改http報文 (使用·實現)

效果如圖實際請求baidu logo的請求實際被修改為了google的(這些改動對客戶端瀏覽器是不可見的,不過因為是圖片檔案所以您在測試的時候請注意瀏覽器快取)

2:使用『Response Replace』修改請求重定向到google的連結

藉助FreeHttp篡改http報文 (使用·實現)

如上圖設定規則即可(如果您剛剛設定了對該圖片連結的Request Modific規則,為了不影響測試過程請將前面的規則設定為不可用)

藉助FreeHttp篡改http報文 (使用·實現)

效果如圖,bd_logo1。png的請求實際被重定向到了新的地址,同樣實現了剛剛的效果

3:使用『Response Replace』直接替換返回圖片內容

藉助FreeHttp篡改http報文 (使用·實現)

如上圖設定規則即可(本地圖片需要提前準備)

藉助FreeHttp篡改http報文 (使用·實現)

效果如圖(效果是一樣的實際原理稍有不同,這次是直接使用本地檔案更改的請求響應)

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

藉助FreeHttp篡改http報文 (使用·實現)

如上圖設定規則即可(注意這次不是修改

https://www。

baidu。com/img/bd_logo1。

png

的響應了,Url Filter匹配的是

https://www。

baidu。com/

藉助FreeHttp篡改http報文 (使用·實現)

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

八:引數化資料設定

引數化資料的使用可以讓您使用篡改規則動態的修改http的內容,並且支援在http請求或相應中捕獲資料供篡改規則使用

當前版本支援以下型別的引數化資料 (所有種類的引數化資料可以使用『=』當前值,『+』下一個值,『-』上一個值這3種方式進行取值)

Key-Value 這是最直接的引數型別,僅提供Key Value 功能,一般用於固定常量,或存放從HTTP報文中捕獲的資料

Index 該引數型別提供一種類似索引的功能(您可以設定它的起始值及範圍,還可以設定每次取值的進步) (the max is 2147483647)

LongIndex 該引數型別與Index類似,不過LongIndex提供了更大的範圍(the max is 9223372036854775807)

StringIndex 該引數與與LongIndex類似,不過它提供一直固定長度的索引(如0001到9999而不是1到9999)

Time 該引數可以讓您以指定格式獲取當前時間

Random 該引數可以讓您以指定格式獲取一個隨機字串/數

List 該引數提供一組特定列表,如“小紅”,“小黑”,“小花”,您可以使用該引數依次或隨機取出設定的3個值

CSV 該引數可以讓您直接使用CSV檔案中的資料

8。1 『parameter data manage』引數化資料管理器

藉助FreeHttp篡改http報文 (使用·實現)

點選Modific Tool中的parameter data manage 即可彈出如上圖所示引數化資料管理器(在request replace 機response replace 編輯區右鍵選單中add parameter data -> edit data 也可以開啟該管理器)

引數化資料管理器主要用於集中管理您所新增的引數化資料

8。1。1引數化資料管理器基本顯示及操作

藉助FreeHttp篡改http報文 (使用·實現)

如上圖『parameter data manage』主要分如上3個部分

1:parameter data manage類別 (點選不同的類別分類可以進行列表切換)

KeyValue:包含Key-Value引數列表

Parameter:包含Index,LongIndex,StringIndex,Time,Random,List引數列表

DataSouce:包含CSV引數列表

2:引數列表

列表依次顯示引數的名稱,類別,當前值(可能每一次取值都不一樣,列表僅顯示當前值)

您可以透過列表右上方新增刪除按鈕新增刪除引數

3:控制當前引數

您在引數列表中選擇任意引數,該引數會在這裡進入編輯模式

該區依次顯示引數名稱(不可編輯),當前值(可編輯),控制按鈕

控制選項一共有3個

編輯當前值:點選該按鈕即為用該區文字框中的內容設定當前引數(注意並不是任意值都是合法的,如字母“ABC”就對一個Index型別的引數一定不合法)

取下一個值:獲取當前引數的下一個值

重置引數:對當前引數進行重置

8。1。2新增引數化資料

藉助FreeHttp篡改http報文 (使用·實現)

如同點選新增按鈕彈出新增框,依次選擇填寫圖中4處資訊即可完成新增

1:下拉選擇引數化資料類別(大類別)

2:下拉選擇引數化資料具體類別

3:填寫您需要新增的引數化資料名稱

4:填寫您引數化資料的格式要求(當您選擇完類別後回顯示格式要求,含義及示例在圖中黃色高亮區域,以幫助您填寫正確的格式要求)

填寫完成後點選新增即可完成新增,下面會以幾個例子說明新增過程

藉助FreeHttp篡改http報文 (使用·實現)

如上圖填寫每次與值後就添加了個簡單的Key-Value引數,引數名為cookie,值為FPkj······

藉助FreeHttp篡改http報文 (使用·實現)

如上圖設定將會新增一個名為RandomId,型別為Random的引數化資料,該Random引數為10位長度的數字

藉助FreeHttp篡改http報文 (使用·實現)

如上圖設定將會新增一個名為timestamp,型別為Time的引數化資料,該Time會提供當前毫秒時間戳

藉助FreeHttp篡改http報文 (使用·實現)

如上圖設定將會新增一個名為csv,型別為CSV的引數化資料,該引數使用本地檔案D:\mycsv。csv作為資料來源並以UTF-8讀取資料(注意@字首表示使用絕對路徑,預設沒有@表示相對路徑,相對路徑為fiddler安裝根目錄下的FreeHttp資料夾)

https://

docs。microsoft。com/zh-c

n/dotnet/api/system。text。encoding?view=netframework-4。7。2

(65001即代表utf8,編碼內碼表參考)

注意如果新增CSV型別資料後,若再在計算機中單獨在對改檔案直接進行編輯後,您需要重新新增該資料來源才能使您的編輯生效

8。1。3檢視編輯匯出CSV型別資料

您在任意一個CSV資料型別上雙擊都會彈出資料來源顯示/編輯框

藉助FreeHttp篡改http報文 (使用·實現)

如上圖您可以選則csv表格中的任意資料(因為實際CSV引數取值都是按從左至右從上至下順序取值,所以當前遊標十分重要,開啟編輯框被選中的資料即是該資料來源當前遊標位置,透過選擇可以設定遊標位置,點選儲存即可生效)

您同樣可以編輯(雙擊任意項可以進行編輯),刪除(選擇行按鍵盤Delete),新增(在尾行直接統計)

完成編輯後您可以點選左上角save data圖示進行儲存,或點選export data將您的資料直接匯出為檔案(CSV引數裡的資料可能全部來自HTTP捕獲,所以匯出可能對您十分必要)

8。2 在規則中使用引數化資料

您在引數化資料管理器中新增的引數可以在『Request Replsce』,『Response Replace』規則中直接使用

8。2。1 使用插入的方式新增引數

藉助FreeHttp篡改http報文 (使用·實現)

如上圖您可以在『Request Replsce』或『Response Replace』編輯區域滑鼠右鍵,在右鍵選單中選擇add Parameter Data ,選擇新增引數的類別,選擇您要新增的引數(這裡選擇的是剛剛新增的ran2),最後選擇取值方式

完成選擇後引數會自動新增到游標後方(圖中黃色高亮區域)

8。2。2使用拖拽的方式新增引數

藉助FreeHttp篡改http報文 (使用·實現)

如上圖所示您可以在引數管理器中選擇您需要的引數直接拖拽到編輯區的任意地方,同樣會為您自動完成新增(以拖拽新增的引數的取值方式都是“下一個”,您可以手動修改)

8。2。3使用手動編輯的方式進行新增

只要按照指定格式*#引數名稱(取值方式)*#您可以自己手動新增引數

引數名稱需要是已經存在的引數名稱

取值方式預設有 下一個(+),上一個(-),當前值(=) 3種可以使用

CSV資料引數除支援上面3種預設取值方式外還支援使用二維座標系地址取值,比如 *#dtb(0-2)*# 表示取dtb這個csv資料來源的第0列,第2行資料(以0為起始索引)

預設下一個取值(+)還支援(+N),表示取後面第N個值

藉助FreeHttp篡改http報文 (使用·實現)

注意:使用手動新增引數後需要手動勾選use Parameter Data

因為使用到了引數化資料,所以報文內容將在每次規則執行時動態生成,您可能無法預測報文實體長度,為此所有使用引數化資料的報文都會被自動新增正確的Content-Length。如果您在使用引數的同時又有意構造錯誤的Content-Length,請再新增一條Response Modific即可

8。3 動態拾取引數化資料

FreeHttp動態獲取http報文中的資料用於設定或新增引數

藉助FreeHttp篡改http報文 (使用·實現)

如上圖在控制條中有『set parameter pick info』圖示(【3。4】節)

您可以在Http請求報文,或響應報文中拾取引數,這取決於您當前建立的篡改規則的型別

點選圖示即可進入引數拾取規則設定視窗

藉助FreeHttp篡改http報文 (使用·實現)

如上圖按提示依次填入引數名稱,拾取方式,拾取附加項,拾取範圍,拾取表示式,然後點選新增或刪除按鈕

引數名稱:如果使用的引數名稱已經存在於引數管理器中,該拾取會修改當前引數的引數值(修改實際都是修改下一個值,對Key-Value來說當前值與下一個值都是同一個值),如果是一個新的引數則會直接新增一個Key-Value型引數

拾取方式:當前版本支援Regex,XML,String 3種拾取方式

拾取附加項:對拾取方式的附加說明

拾取範圍:無論是請求報文還是響應報文,都支援以Line請求/響應行,Heads 請求/響應頭,Entity 請求/響應實體為查詢範圍

下面以Regex為例(Xml使用Xpath與Regex是類似的),說明引數拾取規則的填寫(獲取User-Agent括號內的資料)

藉助FreeHttp篡改http報文 (使用·實現)

Parameter Name填寫ua_1,PickType選擇Regex

PickAdditional選1,1表示取匹配結果的第一項(因為Regex於Xpath匹配都可能是多個結果),0表示把多個結果以逗號連線在一起返回,當然您可以手動填寫2,3,4等索引表示取第N個價格

PickRange 選擇Heads (因為User-Agent在head頭中)

Pick Expression 填寫 \(。*?\)

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

藉助FreeHttp篡改http報文 (使用·實現)

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

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

藉助FreeHttp篡改http報文 (使用·實現)

最後如上圖使用str-len獲取請求行中的isBeta引數,完成後點選確認

藉助FreeHttp篡改http報文 (使用·實現)

在HTTP請求被匹配命中後,即會執行設定好的引數拾取,如上圖引數已經在請求報文中拾取出來了(注意用Str方式匹配的結果是不含有首尾字串的,所以上圖ua_2會少一個括號)

引數拾取過程也會被列印在日誌區

8。4 引數化資料示例

目標:匹配

http://www。

test。com/parameter?

name=value

請求,並返回{“mes”:“hello value”}

其中

http://www。

test。com

是一個不存在的域名,value可能是任意字串 (實際需求就是對不存在介面的mock)

如下配置即可

藉助FreeHttp篡改http報文 (使用·實現)

如上圖新增一個Request Modific規則,因為實際只需要獲取name名稱不需要對請求進行修改,所以修改區域不用填寫任何資訊(不修改),僅新增一個引數拾取規則即可

藉助FreeHttp篡改http報文 (使用·實現)

如上圖再新增一個Response Replace,因為實際介面是不存在的所有必須手動替換一個虛擬的返回,返回body中使用到了請求將會獲取的testName引數(注意勾選Response Direct)

藉助FreeHttp篡改http報文 (使用·實現)

完成新增後,設定剛剛新增的2個規則生效。

藉助FreeHttp篡改http報文 (使用·實現)

如上圖,您在使用瀏覽器(對使用fiddler代理的任何裝置任何客戶端都生效)訪問

http://www。

test。com/parameter?

name=tom

可以看到這個並不存在的介面已經按預期返回了資料,並且成功取出了name

實現及原始碼

完整工程原始碼:

https://

github。com/lulianqi/Fre

eHttp/

Fiddler 擴充套件外掛開發環境配置 請參考官方文件

https://

docs。telerik。com/fiddle

r/Extend-Fiddler/ExtendWithDotNet

(該文件已經詳細說明了搭建及除錯專案的過程)

Fiddler 對外開放介面可以參見《Lulu。Debugging with Fiddler》(書中不僅介紹Fiddler的起源,還纖細介紹了Fiddler的使用,其中就包括對外提供的擴充套件介面)

當前FreeHttp擴充套件外掛開發使用。net framework 版本為4。5(您在配置開發環境時需要注意您除錯引用的Fiddler 的版本,及您開發環境所支援的最高版本)

基本基本結構如下圖

藉助FreeHttp篡改http報文 (使用·實現)

藉助FreeHttp篡改http報文 (使用·實現)

下載工程並載入成功後您可以看到如上圖的基本結構

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

1:AutoTest名稱空間主要提供引數化資料的拾取及管理

2:FiddlerHelper名稱空間 提供與Fiddler篡改直接相關的功能

3:FreeHttpControl名稱空間提供UI介面及窗體操作邏輯

4:HttpHelper名稱空間提供對HTTP協議報文處理的功能

5:MyHelper 名稱空間提供公共的輔助工具

6:WebService名稱空間提供使網路服務的功能

7:FiddlerFreeHttp繼承至IAutoTamper,他是與FIddler資料交換的入口 , FiddlerSessionTamper是FiddlerFreeHttp的工具類

更新記錄:

v1。1

https://www。

cnblogs。com/lulianqi/p/

10547385。html

v1。2

https://www。

cnblogs。com/lulianqi/p/

11051753。html

您可以根據自己的需要下載原始碼自行編譯,直接修改FreeHttp或擴充套件FreeHttp的功能,使他更符合您的個性化需求。

如果您發現了任何問題或是意見請請在

https://

github。com/lulianqi/Fre

eHttp/issues

直接提出 (您也可能透過郵箱聯絡[email protected]。com提出您的問題或建議)