Fiddler 2: повторно отправить запрос через FiddlerScript

Здравствуйте, люди StackOverflow,

Я новичок в Fiddler 2, но, похоже, я неплохо с этим справляюсь. Хотя у меня есть одна проблема, которую я не могу решить.

То, что я хочу сделать, на самом деле очень просто, я думаю. Я хочу перехватить запрос, позволить ему работать, но если ответ меня не устраивает, я хочу, чтобы он повторно отправил запрос и сделал первоначальный запрос несуществующим. Это с использованием FiddlerScript.

Почему это полезно: в случаях, когда вы отправляете запрос, но ответ каждый раз разный. и вы просто хотите правильный ответ.

Что у меня есть до сих пор:

 static function OnBeforeResponse(oSession: Session)
 {
 if (oSession.uriContains("/stackoverflowexample"))
    {
        if(oSession.GetRequestBodyAsString().Contains("GetRandomItem"))
        {

            if(oSession.GetResponseBodyAsString().ToString().Contains("ItemID"))
            {
                var body = oSession.GetResponseBodyAsString();
                var item = 0;
                for(var i = 0; i< body.Length; i++)
                {
                    if(i < body.Length -7)
                    {
                        if(body.Substring(i, 6) == "ItemID")
                        {
                            item= Convert.ToInt32(body.Substring(i+7,1));
                        }
                    }
                }
                MessageBox.Show(item.ToString());
                if(item < 2536) //for example itemid must be higher than 2536
                {
                    //STOP / MAKE this session nonexcistent
                    //RESEND CURRENT REQUEST to get new response

                    oSession.state = SessionStates.SendingRequest;
                    FiddlerObject.utilIssueRequest(oSession.oRequest.ToString());

                }
            }
        }
    }
  }

Любое возможное решение с использованием Fiddlerscript приветствуется.

Спасибо сообществу Stackoverflow! (и разработчики Fiddler)


person Eli    schedule 18.08.2014    source источник


Ответы (1)


Установка состояния сеанса обратно в SendingRequest не дает того, на что вы надеялись.

Вот пример того, что вы пытаетесь сделать. https://groups.google.com/forum/#!searchin/httpfiddler/retry/httpfiddler/3OZQVmQZdR0/uvqTyl3w2BAJ

if (!String.IsNullOrEmpty(oSession["X-RetryNumber"])) return;
for(var iRetry: int = 1; iRetry < 5; ++iRetry)
 { 
   var oSD = new System.Collections.Specialized.StringDictionary();
    oSD.Add("X-RetryNumber", iRetry.ToString());
    var newSession = FiddlerApplication.oProxy.SendRequestAndWait(oSession.oRequest.headers, oSession.requestBodyBytes, oSD, null);
    if (200 == newSession.responseCode) // <--- UPDATE THIS TO WHATEVER YOU LIKE
    {
       // If we were successful on a retry, bail here!
       oSession.oResponse.headers = newSession.oResponse.headers;
       oSession.responseBodyBytes = newSession.responseBodyBytes;
      oSession.oResponse.headers["Connection"] = "close"; // Workaround limitation

     break;
    }
}
person EricLaw    schedule 19.08.2014
comment
Я не могу голосовать. но он работал с Fiddler.Application.oPrody.SendRequestAndWait. Спасибо - person Eli; 22.08.2014
comment
Привет, @Eli. Когда вы задаете вопрос, вы можете принять ответ; вам не нужно голосовать за это. - person EricLaw; 22.08.2014