Fiddler AutoResponder应返回一个json响应,其中包含请求中给出的jQuery会话ID

问题描述 投票:0回答:4

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

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

https://Server/ServiceEndPoint?id=12345

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

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

这个jQuery会话id是通用的。

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

jQuery18205735686348496944_1459416484049({“data”:“JSON data”})

任何人都可以帮助我做到这一点。

谢谢。

jquery json fiddler auto-responder
4个回答
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.      
    }

1
投票

我使用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);
    }

0
投票

只需将此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);
    }

0
投票

假设您正在返回静态内容(文件内容或其他内容),您真的想要获取动态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)。

© www.soinside.com 2019 - 2024. All rights reserved.