一、問題
1、在正常設置抓取HTTP的網絡數據後,手機抓包發現請求數據出現Tunnel to 443的問題:
二、解決
1、檢查抓包設置是否正確,可以參考我之前的文章
2、檢查設置無誤後,發現還是不可以,網友提示可以設置腳本解決
varhosts ='zkd.me develop.dog';
FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
if(hosts.indexOf(oSession.host) >-1){
FiddlerApplication.Log.LogFormat("Capture session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
if(oSession.HTTPMethodIs('CONNECT')){
FiddlerApplication.Log.LogString('create fake tunnel response');
oSession['x-replywithtunnel'] ='FakeTunnel';
return;
}
if(oSession.isHTTPS){
FiddlerApplication.Log.LogString('switch https to http request');
oSession.fullUrl = oSession.fullUrl.Replace("https://","http://");
oSession.port =80;
}
FiddlerApplication.Log.LogFormat("Processed session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
}
FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
}
原話註釋:這段代碼的作用是判斷如果這些指定的域名上有從瀏覽器傳來CONNECT的請求時,直接返回一個假的Response,這時Fiddler不會再試圖去讓請求的實際響應者回應這個CONNECT請求,而是自己返回了一個請求。瀏覽器在收到這個請求以後不明就裏,認爲是服務器已經返回了安全信息,於是便愉快地繼續發送請求。Fiddler在收到之後的請求,會將URL中的https替換爲http,端口強制更換爲80,再發給請求的實際響應者。多重啓幾次fiddler,最終你會發現,所有的https請求,都完美的被抓取了
3、實際上,我遇到的問題不是以上腳本解決的,因爲我可以捕捉到其他的請求
4、後面幾經思考,是因爲小程序抓包的時候需要打開調試模式,打開調試模式後,我就可以正常抓取到小程序的請求了
5、還有些人說443可能是因爲證書過期導致的,如果是證書過期的話,那麼重新安裝證書應該就可以了
三、拓展
1、HTTP請求和HTTPS請求混在一塊會看的眼花,通過腳本保存,可以讓HTTP請求和HTTPS請求顯示不一樣的顏色。腳本如下
//這段代碼隨便放哪,只要在這個OnBeforeRequest方法裏就行了。
if(oSession.isHTTPS && oSession.url.indexOf(oSession.host)> -1){
oSession["ui-color"] = "blue";
}
if(!oSession.isHTTPS && oSession.url.indexOf(oSession.host)> -1){
oSession["ui-color"] = "green";
}
2、效果如下