我需要你的帮助,我开发了一个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”})
任何人都可以帮助我做到这一点。
谢谢。
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来做到这一点:
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);
}
只需将此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);
}
假设您正在返回静态内容(文件内容或其他内容),您真的想要获取动态jquery回调函数名称并将其包装在您静态返回的内容中。因此,我修改了上面的一个答案,并注意不要影响您没有针对的JSONP响应。
在规则>自定义规则...中,执行以下操作:
//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)。