0

我需要你的帮助,我开发了一个 javascript 代码,它询问 Web 服务并以 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({"数据":"JSON数据"})

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

谢谢你。

4

4 回答 4

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);
    }
于 2016-04-01T10:32:11.570 回答
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.      
    }
于 2016-03-31T21:11:47.657 回答
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)。

于 2018-09-18T14:18:09.903 回答
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);
    }
于 2018-04-06T16:43:32.993 回答