美文网首页
FiddlerScript 修改响应内容 OnBeforeRes

FiddlerScript 修改响应内容 OnBeforeRes

作者: 码农私房菜 | 来源:发表于2023-11-02 16:27 被阅读0次

    FiddlerScript自定义脚本可以实现很强大的内容替换,包括很有意义的——修改返回内容。

    具体的方法可以参考官网:http://docs.telerik.com/fiddler/KnowledgeBase/FiddlerScript/ModifyRequestOrResponse

    而这里想说的是,官网的说明并不准确,可能旧版本Fiddler是没问题的,但在4.X,我发现只修改OnBeforeResponse的脚本是无法实现效果的,虽然Fiddler的抓包看起来是成功修改了返回内容,但实际上,浏览器得到的数据还是跟服务器原来返回的一样。

    问题关键点是:必须在OnBeforeResponse前,设置oSession.bBufferResponse = true;

    顾名思义,开启了缓存模式来处理返回内容,才能最终反馈到浏览器上,否则,保持原有的流式模式的话,就会出现修改和返回同时进行,浏览器得到的还是原版的数据。
    建议在OnPeekAtResponseHeaders中根据需要,设置bBufferResponse ,例如:

    static function OnPeekAtResponseHeaders(oSession: Session) {
            //FiddlerApplication.Log.LogFormat("Session {0}: Response header peek shows status is {1}", oSession.id, oSession.responseCode);
            // ** TODO**
            if ((null!=bpResponseURI) && oSession.uriContains(bpResponseURI)) {
                oSession["x-breakresponse"]="uri";
                oSession.bBufferResponse = true;
            }
         
            if (oSession.HostnameIs("www.baidu.com") && oSession.oResponse.headers.ExistsAndContains("Content-Type","text/html")){
                oSession.bBufferResponse = true;    //需要在返回头这里就设置buffer处理,否则,后续无法在onBeforeResponse中修改body(修改的动作不会阻塞原来的返回)
            }
    
        }
    
        static function OnBeforeResponse(oSession: Session) {
           // **TODO**
            if (oSession.HostnameIs("www.baidu.com") && oSession.oResponse.headers.ExistsAndContains("Content-Type","text/html")){
                oSession.utilDecodeResponse();
                if(NO_SSO){
                    oSession.utilReplaceInResponse('</body>','<script>'插入数据'</script></body>');
                } 
            }
        }
    

    相关文章

      网友评论

          本文标题:FiddlerScript 修改响应内容 OnBeforeRes

          本文链接:https://www.haomeiwen.com/subject/vejnidtx.html