在Chrome中替换服务器JSON响应

我在使用AJAX方式查询服务器上的JSON数据时,遇到了一些基于Web的工具的问题。 它工作不正常 - 返回的结果往往不是我想要的,我需要等待很长时间才能让服务器处理请求。

事实是,我总是希望返回相同的数据(关于几个人,准确地说),所以我想要伪造服务器响应。 我试图通过几种方式来实现这一点,但没有成功。

我试着使用Chrome的WebRequest功能 - 我准备了一个扩展,并将请求重定向到一个带有JSON编码的数据URL。 它的工作,但只有当我在Chrome地址栏中手动输入地址时。 当Web应用试图访问该地址时,默认情况下重定向失败。 我立即想到了Access Origin的限制,并迅速建立了一个发送Access-Control-Allow-Origin标头的网络服务器。

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

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

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

有没有其他的方式来喂我的硬编码JSON的应用程序? 或者我错过了什么?

编辑基于“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']);

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

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

"manifest_version": 2
}

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


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

最简单的方法是使用Fiddler如果您知道俄语,或者您的浏览器具有体面的翻译功能,您可以阅读本文 - 就我的理解您需要第二部分 - 关于自动应答机。 或者下面有几个与英文手册的链接。

这个截图是答案 在这里输入图像描述

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


如果我理解正确,那么您将控制生成JSON响应的服务器。 如果是这种情况,那么它必须是可能的 - 没有任何Chrome扩展 - 得到AJAX(XMLHTTPRequest)请求和响应使用正确的CORS头。

根据我的经验,失败的跨域XHR请求似乎只能在Chrome中“默默地”失败,但如果仔细查看控制台,您将看到类似于以下内容的错误消息:

XMLHttpRequest无法加载http://example.com/yourJSONfile.json。 Access-Control-Allow-Origin不允许Origin http://your-app-domain.com:80。

此消息有时可能会引起误解,因为如果任何CORS相关错误(即使Access-Control-Allow-Origin设置正确),它将显示出来。 此外,在网络选项卡上,您将看到XHR请求和响应标头。

现在我们来谈谈CORS头文件。 我将不得不看到你的请求的AJAX选项或HTTP请求头,以确切地告诉你需要哪些CORS头,但就我现在可以告诉“访问控制 - 允许 - 来源:*”可能不足以满足你的请求成功:根据您的请求标头(目前我不知道,因此以下仅仅是示例),您可能需要额外的CORS标头,如:

“Access-Control-Allow-Methods”:“选项,GET,POST”

“Access-Control-Allow-Headers”:“内容类型,接受,来源”

另外,出于调试目的,启用以下功能将会很有帮助:

“Access-Control-Expose-Headers”:“Access-Control-Allow-Origin”

以便您可以在网络选项卡上看到与CORS相关的响应标题。

链接地址: http://www.djcxy.com/p/69153.html

上一篇: Replace server JSON response in Chrome

下一篇: How to customise EKEventEditViewController