我刚刚发布了一个Devtools扩展,可以做到这一点:)
它叫做tamper,基于mitmproxy,它允许你查看当前标签页发出的所有请求,修改它们,并在下次刷新时提供修改后的版本。
这是一个相当早期的版本,但应该与OS X和Windows兼容。如果对你不起作用,请告诉我。
你可以在这里获取它:http://dutzi.github.io/tamper/
工作原理
正如下面的@Xan评论所说,该扩展通过与扩展了mitmproxy的Python脚本进行本机消息传递来通信。
该扩展使用chrome.devtools.network.onRequestFinished列出所有请求。
chrome.devtools.network.onRequestFinished
当你点击其中一个请求时,它使用请求对象的getContent()方法下载其响应,然后将该响应发送给保存在本地的Python脚本。
getContent()
然后,它使用call(对于OSX)或subprocess.Popen(对于Windows)在编辑器中打开文件。
call
subprocess.Popen
Python脚本使用mitmproxy监听通过该代理进行的所有通信,如果检测到对已保存文件的请求,它将提供已保存的文件。
我使用了Chrome的代理API(具体来说是chrome.proxy.settings.set())将PAC设置为代理设置。该PAC文件将所有通信重定向到Python脚本的代理。
chrome.proxy.settings.set()
mitmproxy最棒的一点是它还可以修改HTTPS通信。所以你也可以使用它:)
一般来说,您无法使用标准的Chrome扩展API更改HTTP请求的响应体。
此功能正在104058: WebRequest API: 允许扩展编辑响应体上进行请求。收藏该问题以获取更新通知。
如果您想编辑已知的XMLHttpRequest的响应体,请通过内容脚本注入代码,以覆盖默认的XMLHttpRequest构造函数,使用自定义(功能完整的)构造函数在触发真实事件之前重写响应体。确保您的XMLHttpRequest对象与Chrome内置的XMLHttpRequest对象完全兼容,否则会导致AJAX-heavy网站出现问题。
XMLHttpRequest
在其他情况下,您可以使用chrome.webRequest或chrome.declarativeWebRequest API将请求重定向到data:-URI。与XHR方法不同,您将无法获取原始请求的内容。实际上,请求永远不会到达服务器,因为重定向只能在实际请求发送之前完成。如果您重定向main_frame请求,用户将看到data:-URI而不是请求的URL。
chrome.webRequest
chrome.declarativeWebRequest
data:
main_frame
我刚刚发布了一个Devtools扩展,可以做到这一点:)
它叫做tamper,基于mitmproxy,它允许你查看当前标签页发出的所有请求,修改它们,并在下次刷新时提供修改后的版本。
这是一个相当早期的版本,但应该与OS X和Windows兼容。如果对你不起作用,请告诉我。
你可以在这里获取它:http://dutzi.github.io/tamper/
工作原理
正如下面的@Xan评论所说,该扩展通过与扩展了mitmproxy的Python脚本进行本机消息传递来通信。
该扩展使用
chrome.devtools.network.onRequestFinished
列出所有请求。当你点击其中一个请求时,它使用请求对象的
getContent()
方法下载其响应,然后将该响应发送给保存在本地的Python脚本。然后,它使用
call
(对于OSX)或subprocess.Popen
(对于Windows)在编辑器中打开文件。Python脚本使用mitmproxy监听通过该代理进行的所有通信,如果检测到对已保存文件的请求,它将提供已保存的文件。
我使用了Chrome的代理API(具体来说是
chrome.proxy.settings.set()
)将PAC设置为代理设置。该PAC文件将所有通信重定向到Python脚本的代理。mitmproxy最棒的一点是它还可以修改HTTPS通信。所以你也可以使用它:)
一般来说,您无法使用标准的Chrome扩展API更改HTTP请求的响应体。
此功能正在104058: WebRequest API: 允许扩展编辑响应体上进行请求。收藏该问题以获取更新通知。
如果您想编辑已知的
XMLHttpRequest
的响应体,请通过内容脚本注入代码,以覆盖默认的XMLHttpRequest
构造函数,使用自定义(功能完整的)构造函数在触发真实事件之前重写响应体。确保您的XMLHttpRequest对象与Chrome内置的XMLHttpRequest
对象完全兼容,否则会导致AJAX-heavy网站出现问题。在其他情况下,您可以使用
chrome.webRequest
或chrome.declarativeWebRequest
API将请求重定向到data:
-URI。与XHR方法不同,您将无法获取原始请求的内容。实际上,请求永远不会到达服务器,因为重定向只能在实际请求发送之前完成。如果您重定向main_frame
请求,用户将看到data:
-URI而不是请求的URL。