gpt4 book ai didi

javascript - Firefox - 当某些变量与某些模式匹配时拦截/修改发布数据

转载 作者:行者123 更新时间:2023-11-28 19:22:39 28 4
gpt4 key购买 nike

我想知道当 url 和某些变量满足某种模式时是否可以拦截和修改发布数据。

例如:

让登录网址为:http://www.someonlineprofiles.com

让发布数据为:

email: "myemail@gmail.com"
pass: "mypass"
theme: "skyblue"

如果满足以下条件,我希望这样:

url = "http://www.someonlineprofiles.com/ajax/login_action_url"

电子邮件 = “myemail@gmail.com”

然后theme值无条件更改为:"hotdesert"

是否可以为此创建一个 Firefox 插件?插件是否足够强大?

我找到了这个链接: modify the post data of a request in firefox extension

提前致谢!

[添加信息]

我不知道了解我的 Firefox 版本是否有趣:35.​​0.1

最佳答案

您的问题过于宽泛,因此我只会概述如何做到这一点,而不是复制粘贴就绪的解决方案,这需要一段时间才能创建,而且还会剥夺您的学习体验.

观察员

首先,it is possible for add-ons to observe and manipulate HTTP(S) requests before the browser sends the request ,你只需要实现并注册所谓的http观察者。

const {classes: Cc, instances: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm"); // for Services

var httpRequestObserver = {
observe: function(channel, topic, data) {
if (topic != "http-on-modify-request") {
return;
}
if (!(channel instanceof Ci.nsIHttpChannel)) {
return; // Not actually a http channel
}
// See nsIChannel, nsIHttpChannel and nsIURI/nsIURL
if (channel.URI.host != "www.someonlineprofiles.com") {
return;
}
doSomething(channel);
},

register: function() {
Services.obs.addObserver(this, "http-on-modify-request", false);
},

unregister: function() {
Services.obs.removeObserver(this, "http-on-modify-request");
}
};

httpObserver.register();
// When your add-on is shut down, don't forget to call httpObserver.unregister();

仅在您的附加组件中注册一次 http 观察器:

  • 如果您使用 SDK,请将其放入 main.js 或专用模块中。您还需要稍微重写代码,并将 const .. = Components 行替换为 require("chrome") .
  • 如果您正在编写 XUL 覆盖插件,请将其放入 code module .

重写帖子数据

我们仍然需要实现doSomething()并实际重写post数据。 http channel 通常实现 nsIUploadStream 接口(interface),上传流是当前发布数据(如果有)的位置。它还具有 setUploadStream() 方法,您可以使用该方法完全替换上传流。

function doSomething(channel) {
if (!(channel instanceof Ci.nsIUploadStream)) {
return;
}
// construct new post data
channel.setUploadStream(newStream);
}

构建新的帖子数据将取决于您的实际需求。我provided a working example in another answer告诉你如何做到这一点。

如果您需要从旧上传流中获取一些数据,则需要自行将现有的 channel.uploadStream 解码为 multipart/form-data。我建议您检查 TamperData 和类似的附加组件,了解它们如何在那里执行操作。

关于javascript - Firefox - 当某些变量与某些模式匹配时拦截/修改发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28511248/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com