【问题标题】:Fiddler AutoResponder should returns a json response with jQuery session id given in requestFiddler AutoResponder 应该返回一个 json 响应,其中包含请求中给出的 jQuery 会话 ID
【发布时间】:2016-03-31 09:42:56
【问题描述】:

我需要你的帮助,我开发了一个 javascript 代码,它可以询问网络服务并以 JSON 格式取回数据。

当我这样询问网络服务时:

https://Server/ServiceEndPoint?id=12345

MyApplication 向我的 Web 服务 URL 添加了一些其他参数,如下所示:

https://Server/ServiceEndPoint?id=12345&callback=jQuery18205735686348496944_1459416484049&_=1459416484892

这个 jQuery 会话 ID 是通用的。

所以,我正在使用 Fiddler 来模拟 Web 服务响应。我需要在我的回复开头添加这个 jQuery 会话 ID,如下所示:

jQuery18205735686348496944_1459416484049({"data":"JSON data"})

谁能帮我做这件事。

谢谢。

【问题讨论】:

    标签: jquery json fiddler auto-responder


    【解决方案1】:

    Fiddler 的 AutoResponder 本身无法做到这一点(因为它无法根据请求 URL 修改响应正文)。相反,您需要编写一些简单的 FiddlerScript 来完成它。例如。规则 > 自定义规则 > OnBeforeRequest

        if (oSession.uriContains("server/ServiceEndPoint?")) {
            oSession.utilCreateResponseAndBypassServer();
            oSession.oResponse.headers.Add("Content-Type", "application/json");
            oSession.ResponseBody = System.IO.File.ReadAllBytes("C:\\Your\\File.txt");              
            // TODO:Copy the callback value to the front of the response string here.      
        }
    

    【讨论】:

    • 我使用 FiddlerScript 来做到这一点:
    【解决方案2】:

    我用 FiddlerScript 来做:

        if (oSession.HostnameIs("ServerName")){
    
            var body = "";
            var s_qs = (oSession.url + "?").split("?")[1];
    
            var querystring = HttpUtility.ParseQueryString(s_qs);
            var s_callback = querystring.Get("callback");
    
            if(oSession.uriContains("EndPointName"))
            {
                body = s_callback + "({'data':'datContent'})";
            }
            oSession.utilSetResponseBody(body);
        }
    

    【讨论】:

    • 你没有说你把它放在哪里,但从它的外观来看,它在访问服务器后运行。如果您改用OnBeforeRequestutilCreateResponseAndBypassServer,则可以避免这种情况。
    【解决方案3】:

    只需将此 FiddlerScript 添加到 OnBeforeResponse,您就可以继续使用 AutoResponder。这将自动为您修复回调名称:

        //Autofix all JSONP responses
        if (oSession.uriContains("callback=jQuery")) {
    
            var s_qs = (oSession.url + "?").split("?")[1];
    
            var querystring = HttpUtility.ParseQueryString(s_qs);
            var s_callback = querystring.Get("callback");           
    
            var body = new Regex("jQuery\\d+_\\d+").Replace(oSession.GetResponseBodyAsString(), s_callback);
    
            oSession.utilSetResponseBody(body);
        }
    

    【讨论】:

      【解决方案4】:

      假设您要返回静态内容(文件内容或其他内容),您确实希望采用动态 jquery 回调函数名称并将其包装在您静态返回的任何内容上。因此,我修改了上述答案之一,并注意不要影响您未针对的 JSONP 响应。

      在规则 > 自定义规则...中,执行以下操作:

      1. 如果文件顶部没有此导入,请在该文件顶部添加:import System.Web;
      2. 找到 OnBeforeResponse(oSession) 方法并添加以下内容:

        //Autofix all JSONP responses
        if (oSession.uriContains("callback=jQuery")) {
            var s_qs = (oSession.url + "?").split("?")[1];
        
            var querystring = HttpUtility.ParseQueryString(s_qs);
            var s_callback = querystring.Get("callback"); 
        
            var oldBody = oSession.GetResponseBodyAsString();
            if (oldBody.StartsWith(s_callback)) return;
        
            var body = String.Concat(s_callback, "(", oSession.GetResponseBodyAsString(), ")");
        
            oSession.utilSetResponseBody(body);
        }
        

      这会将 { "test": "testValue" } 的 JSON 响应转换为 jQuery9827345872635_982735982375({ "test": "testValue" })(这里的 jQuery 回调是我为演示目的生成的随机 BS)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多