FiddlerScript customization throws and error in Scriptbase.cs:919

2 posts, 0 answers
  1. Alexey
    Alexey avatar
    2 posts
    Member since:
    May 2014

    Posted 04 May 2017 Link to this post

    Hi, I'm trying to proxy and cache some responses that are being redownloaded over and over.

    To do that I wrote this simple customization in FiddlerScript:

        static function OnBeforeResponse(oSession: Session) {
     
             
            var captureRequests = false;
            var targetHost = "api.nuget.org";
            var captureFolder = "c:\\Projects\\Fiddler\\api.nuget.org";
             
            // Capture traffic
            if (captureRequests && oSession.host.toLowerCase() == targetHost)
            {
                var targetFile = captureFolder + oSession.PathAndQuery.Split('?')[0].Replace('/','\\');
                oSession.oResponse["X-oSession-PathAndQuery"] = targetFile;
                var fi = new FileInfo(targetFile);
                Directory.CreateDirectory(fi.DirectoryName)
                if(!File.Exists(fi.FullName))
                {
                    File.WriteAllBytes(fi.FullName, oSession.ResponseBody);
                }
            }
     
    //      // Replay captured
            var replayRequests = true;
            if (replayRequests&& oSession.host.toLowerCase() == targetHost)
            {
                var targetFile = captureFolder +"\\" + oSession.PathAndQuery.Split('?')[0].Replace('/','\\');
                var fi = new FileInfo(targetFile);
                if(!File.Exists(fi.FullName))
                {
                    oSession["x-replywithfile"] = fi.FullName;
                }
                 
            }
        }

     

    And presumably it should work - when captureRequests=true - fiddler captures requests from a particular domain into a folder, preserving path and file name

    When replayRequests = true - it simply replays existing files.

    The problem here that even if I just capturing the data (I suspect I may be replaying too late - fiddler would call http already by that time...) - fiddler throws a lot of errors with this text: 

    ---------------------------
    FiddlerScript OnBeforeResponse() failed.
    ---------------------------
    There was a problem with your FiddlerScript.
     
    The given path's format is not supported.
       at System.Security.Permissions.FileIOPermission.EmulateFileIOPermissionChecks(String fullPath)
     
       at System.Security.Permissions.FileIOPermission.QuickDemand(FileIOPermissionAccess access, String fullPath, Boolean checkForDuplicates, Boolean needFullPath)
     
       at System.IO.FileInfo.Init(String fileName, Boolean checkHost)
     
       at Fiddler.ScriptNamespace.Handlers.OnBeforeResponse(Session oSession)
     
       at Fiddler.ScriptBase.€(Session ) in C:\JenkinsHome\jobs\FiddlerReleaseBuild\workspace\Fiddler2\Common\Application\Scripting\ScriptBase.cs:line 919
    ---------------------------
    OK  
    ---------------------------

     

    I tried to investigate it by playing with code and identified that for some reason a typical file path like `c:\Projects\Fiddler\api.nuget.org\v3\registration1-gz\analytics\index.json` causes an error. Or that code is somehow not thread safe and competing requests simply break it (and visual studio starts them in parallel so there is a high chance of some kind of race).

    Can anyone suggest what am I doing wrong here or maybe advice on better solution to the problem.

     

     

     

     

     

     

     

  2. Alexey
    Alexey avatar
    2 posts
    Member since:
    May 2014

    Posted 04 May 2017 in reply to Alexey Link to this post

    there is a bug in the code above - 

    "if file doesn't exist":

    if( !File.Exists(fi.FullName) )
    {
      oSession["x-replywithfile"] = fi.FullName;
    }

    should be "if file exists"

    if( File.Exists(fi.FullName) )

    I fixed it but it's not related to the problem descibed above

     

Back to Top