是否可以使用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重复此操作。
我需要重播捕获的会话,但必须以与记录时相同的延迟发送请求。有可能吗?
答案 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();
}
}
}
干杯