Fiddler AutoResponder 应该 returns 一个 json 响应,请求中给出 jQuery 会话 ID
Fiddler AutoResponder should returns a json response with jQuery session id given in request
我需要你的帮助,我开发了一个 javascript 代码来询问网络服务并以 JSON 格式取回数据。
当我这样询问网络服务时:
https://Server/ServiceEndPoint?id=12345
MyApplication 将一些其他参数添加到我的 Web 服务 URL,如下所示:
https://Server/ServiceEndPoint?id=12345&callback=jQuery18205735686348496944_1459416484049&_=1459416484892
这个 jQuery 会话 ID 是通用的。
所以,我正在使用 Fiddler 来模拟网络服务响应。我需要在我的回复开头添加此 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 响应。
在规则 > 自定义规则...中,执行以下操作:
- 如果文件顶部没有此导入,请将其添加到文件顶部:导入 System.Web;
找到 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)。
我需要你的帮助,我开发了一个 javascript 代码来询问网络服务并以 JSON 格式取回数据。
当我这样询问网络服务时:
https://Server/ServiceEndPoint?id=12345
MyApplication 将一些其他参数添加到我的 Web 服务 URL,如下所示:
https://Server/ServiceEndPoint?id=12345&callback=jQuery18205735686348496944_1459416484049&_=1459416484892
这个 jQuery 会话 ID 是通用的。
所以,我正在使用 Fiddler 来模拟网络服务响应。我需要在我的回复开头添加此 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 响应。
在规则 > 自定义规则...中,执行以下操作:
- 如果文件顶部没有此导入,请将其添加到文件顶部:导入 System.Web;
找到 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)。