替换Chrome中的服务器JSON响应

use*_*567 7 google-chrome google-chrome-extension

我有一些基于Web的工具的问题,该工具以AJAX方式向服务器查询JSON数据.它运行不正常 - 返回的结果通常不是我想要的,我需要等待很长时间才能让服务器处理请求.

事实是我总是希望返回相同的数据(确切地说是一些人),所以我想到了伪造服务器响应.我试图通过几种方式实现这一目标,但没有成功.

我尝试使用Chrome的WebRequest功能 - 我准备了一个扩展程序,并将请求重定向到我的JSON编码的数据URL.它工作正常,但只有当我在Chrome的地址栏中手动输入地址时才有效.当Web应用程序尝试访问该地址时,静默重定向失败.我立即想到了Access Origin限制并快速设置了一个发送Access-Control-Allow-Origin标头的网络服务器.

不幸的是,这也没有用.当我手动输入地址时,服务器正在被查询并返回正确的JSON,但在应用程序中请求...默默地失败.看起来Chrome完全忽略了可能的Access-Control-Allow-Origin标头,因为它甚至没有查询服务器.Chrome很有可能只分析网址,因为我将有问题的请求重定向到应用领域中的随机网址.

我还尝试伪造应用程序的整个JavaScript文件 - 它使用相同的方法静态链接到文档(例如,它通过标准脚本标记包含).我失败了 - 重定向只是默默失败,就像我第一次尝试失败一样.

我的问题的一个常见解决方案是使用某种更改服务器输出的代理,但我不能这样做 - 我不想等待几分钟让服务器处理请求.顺便说一句,该应用只能通过HTTPS访问.

有没有其他方法可以用我的硬编码JSON提供应用程序?或者也许我错过了什么?

EDIT 插件代码,基于"catblock"示例:

chrome.webRequest.onBeforeRequest.addListener(
function(info) {
  console.log("AJAX call intercepted: " + info.url)
  return {redirectUrl: 'data:application/json,"test"'};
},
// filters
{
  urls: [
  "*://address.to.the.js.file.requested"
]
}, ['blocking']);
Run Code Online (Sandbox Code Playgroud)

清单文件,我只将域添加到权限部分:

{
"name": "CatBlock",
"version": "1.0",
"description": "I can't has cheezburger!",
"permissions": ["webRequest", "webRequestBlocking", 
              "*://some.domain.com/*"],
"background": {
  "scripts": ["background.js"]
},

"manifest_version": 2
}
Run Code Online (Sandbox Code Playgroud)

编辑2: 以下是Chrome开发者控制台网络面板的屏幕截图,显示请求被静默取消: 控制台截图 控制台截图

Vit*_*Vad 3

有几种方法可以做到这一点。

最简单的方法是使用Fiddler 如果您懂俄语,或者您的浏览器具有不错的翻译功能,您可以阅读这篇文章- 据我所知,在您的情况下您需要第二部分 - 关于自动回复器。或者下面有一些英文手册的链接。

这张截图就是答案在此输入图像描述

关于 Chrome 中的 Access-Control-Allow-Origin - 我的扩展也非常简单(只需添加到响应标头“Access-Control-Allow-Origin: *”),并允许您在开发某些功能时避免此错误。你也可以用 Fiddler 做同样的事情在 chrome 中你可以使用开发者密钥“chrome --disable-web-security”运行 Chrome,它也可以删除“Access-Control-Allow-Origin”的错误