2015-01-28 1 views
-3

Может ли HTTP-запрос воспроизводиться с использованием Fiddler с проверенным временем сессии?Скрипач для запроса HTTP-запросов с соблюдением времени

Я попытался воспроизвести сеанс со скрипачом, но повтор отправляет запросы на максимальную скорость, игнорируя время захвата.

Я попытался добавить это 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

, что вы сделали до сих пор? вы попробовали это с Fiddler? вы об этом говорили в Google? – Mysterion

ответ

0

Fiddler сам не пытается уважать относительные тайминги при повторном запросе.

Вы можете написать сценарий или расширение, которое будет делать это, основываясь на каждом объекте oTimers.

+0

Хорошо спасибо. Я попробую эту дорогу. – Lucar

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(); 
      } 
     } 
} 

Приветствия

+0

Почему ваш блок блокирует насос в течение 10 секунд? В вашем коде предполагается, что сеансы сортируются в порядке ClientBeginRequest, что не всегда является безопасным предположением. – EricLaw