Fiddler解决Tunnel to 443的问题
一、问题
1、在正常设置抓取HTTP的网络数据后,手机抓包发现请求数据出现Tunnel to 443的问题:
图1二、解决
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、实际上,我遇到的问题不是以上脚本解决的,因为我可以捕捉到其他的请求
图24、后面几经思考,是因为小程序抓包的时候需要打开调试模式,打开调试模式后,我就可以正常抓取到小程序的请求了
图35、还有些人说443可能是因为证书过期导致的,如果是证书过期的话,那么重新安装证书应该就可以了
三、拓展
1、HTTP请求和HTTPS请求混在一块会看的眼花,通过脚本保存,可以让HTTP请求和HTTPS请求显示不一样的颜色。脚本如下
图4//这段代码随便放哪,只要在这个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、效果如下
图5