Fiddler以时间尊重请求HTTP请求

时间:2015-01-28 10:46:51

标签: fiddler session-replay

是否可以使用Fiddler重播HTTP请求,并考虑到受限会话时间?

我尝试重播与fiddler的会话,但重播会以最大速度发送请求而忽略捕获时间。

我尝试将此添加到onBeforeRequest()函数:

if (oSession.HostnameIs("example.com") && oSession.uriContains("page.html")) {
    // I tried this
    System.Threading.Thread.Sleep(1000);
    // and this
    // oSession["response-trickle-delay"] = "30"; 
}

但效果不好,我必须为每个捕获的URI重复此操作。

我需要重播捕获的会话,但必须以与记录时相同的延迟发送请求。有可能吗?

2 个答案:

答案 0 :(得分:1)

Fiddler在重播请求时本身并不试图尊重相对时间。

您可以根据每个Session对象的oTimers数据编写可执行此操作的脚本或扩展程序。

答案 1 :(得分:0)

这是我的解决方案,它可能对其他人有用:

static function DoTimedReplay() {
    var oSessions = FiddlerApplication.UI.GetSelectedSessions();
    if (oSessions.Length == 0) {
        oSessions = FiddlerApplication.UI.GetAllSessions();
        if (oSessions.Length == 0) {
            FiddlerObject.alert("No session available.");
            return;
        }
    }

    FiddlerObject.StatusText = "Start replay";
    var iStart = Environment.TickCount;
    for (var x:int = 0; x < oSessions.Length; x++) {
        var iDelay:Int32 = x == 0 ? 0 :
            System.Math.Round(
                (oSessions[x].Timers.ClientBeginRequest - oSessions[x - 1].Timers.ClientBeginRequest).TotalMilliseconds
            );
        replay(oSessions[x], iStart + iDelay);
    }
    FiddlerObject.StatusText = "Replay Done";
}

static function replay(oSession: Session, iDelay: Int32) {
        if (!String.IsNullOrEmpty(oSession["X-Replayed"]))
            return;
        try {
            var oSD = new System.Collections.Specialized.StringDictionary();
            oSD.Add("X-Replayed", "True");
            while (iDelay > Environment.TickCount) {
                Application.DoEvents();
            }
            FiddlerApplication.oProxy.SendRequest(oSession.oRequest.headers, oSession.requestBodyBytes, oSD);
        } catch(ex) {
            var iTickCount = Environment.TickCount + 10000;
            while (iTickCount > Environment.TickCount) {
                Application.DoEvents();
            }
        }
}

干杯