You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox扩展能否修改出站HTTP请求体?实践遇阻求助

Firefox扩展修改出站HTTP请求体无效的解决办法

Firefox的webRequest API确实不支持通过onBeforeRequest直接修改请求体——官方文档明确说明该事件仅用于取消或重定向请求,返回的requestBody字段不会被浏览器处理,这就是你代码无效的原因。

要实现修改请求体的需求,正确的做法是取消原请求,重新构造并发送修改后的请求,再将响应转发给原页面,具体代码如下:

核心代码示例

const text = "http mod test";

async function replaceBody(details) {
  // 只处理POST请求
  if (details.method !== 'POST') return;

  // 解析原始请求体
  const originalBody = details.requestBody.raw[0].bytes;
  const decoder = new TextDecoder();
  const jsonBody = JSON.parse(decoder.decode(originalBody));
  jsonBody.content = text;
  const newBody = JSON.stringify(jsonBody);

  // 复制并处理原请求头(移除Content-Length,浏览器会自动计算新长度)
  const headers = new Headers();
  details.requestHeaders.forEach(header => headers.append(header.name, header.value));
  headers.delete('Content-Length');

  // 构造新请求的配置
  const requestInit = {
    method: details.method,
    headers: headers,
    body: newBody,
    credentials: 'include', // 保留会话信息
    mode: 'cors' // 适配跨域场景
  };

  try {
    // 发送修改后的请求
    const response = await fetch(details.url, requestInit);
    const responseBody = await response.text();
    
    // 将响应通过data URL返回给原请求发起者
    return {
      cancel: true,
      redirectUrl: `data:application/json,${encodeURIComponent(responseBody)}`
    };
  } catch (err) {
    console.error('重发请求失败:', err);
    return { cancel: false };
  }
}

// 注册监听器,需添加requestHeaders权限获取原请求头
browser.webRequest.onBeforeRequest.addListener(
  replaceBody,
  { urls: ["*://discord.com/api/v9/channels/*"], types: ["xmlhttprequest"] },
  ["blocking", "requestBody", "requestHeaders"]
);

必要的Manifest配置

确保你的manifest.json中声明了正确的权限:

{
  "manifest_version": 3,
  "name": "请求体修改工具",
  "version": "1.0",
  "permissions": ["webRequest", "webRequestBlocking", "*://discord.com/*"],
  "background": {
    "scripts": ["background.js"]
  }
}

关键说明

  1. 取消原请求:通过返回{cancel: true}阻止原始请求发送
  2. 重发请求:使用fetch构造修改后的请求,带上原请求的会话信息和请求头
  3. 响应转发:用data URL将新请求的响应返回给原页面,保证页面逻辑能正常接收响应

内容的提问来源于stack exchange,提问作者user31184281

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 14:55:00