!name=我的脚本

Shadowrocket(小火箭)脚本功能 是基于 JavaScript 的高级功能,用于修改 HTTP/HTTPS 请求和响应,实现去广告、解锁功能、数据修改等,以下是详细使用指南:

脚本功能基础

脚本类型

  • HTTP 请求脚本:修改请求头、URL、请求体(Body)
  • HTTP 响应脚本:修改响应体、响应头(常用于去广告、破解会员)
  • Cron 定时脚本:定时执行任务(如自动签到)

工作原理

脚本在流量经过小火箭时拦截并处理,仅对 HTTP/HTTPS 流量生效(HTTPS 需要开启 MITM 解密)。


配置方法

方法 A:通过模块(Module)添加(推荐)

  1. 打开 Shadowrocket → 配置模块右上角 +
  2. 输入模块链接(如神机规则、NobyDa 等提供的模块)
  3. 或创建本地模块,格式如下:

[Script]
# 格式:脚本名称 = 类型, 正则匹配, 脚本路径, 是否需要 MITM
京东比价 = type=http-response, pattern=^https?://api\.m\.jd\.com/client\.action\?functionId=(wareBusiness|serverConfig|basicConfig), requires-body=1, script-path=https://raw.githubusercontent.com/xxx/jd_price.js, enable=true

方法 B:直接编辑配置

  1. 配置 → 点击当前配置 → 编辑纯文本
  2. [Script] 段落添加脚本规则

脚本语法详解

基础结构

// 修改请求
var modifiedRequest = {
    url: $request.url,
    headers: $request.headers,
    body: $request.body
};
$done(modifiedRequest);
// 修改响应
var modifiedResponse = {
    status: 200,
    headers: $response.headers,
    body: JSON.stringify({"key": "value"})
};
$done(modifiedResponse);

常用变量

  • $request: 包含 url, method, headers, body
  • $response: 包含 status, headers, body
  • $done(): 结束脚本并返回修改后的数据
  • $notify(title, subtitle, message): 发送通知
  • $persistentStore: 持久化存储
  • $httpClient: 发起网络请求

实用示例

示例 1:简单的响应修改(去广告原理)

// 解析原始响应
let body = JSON.parse($response.body);
// 修改数据(假设去除广告字段)
body.data.ads = [];
body.data.vip = true;
// 返回修改后的响应
$done({body: JSON.stringify(body)});

示例 2:请求重定向

// 修改请求 URL
$request.url = $request.url.replace("old-domain.com", "new-domain.com");
$done($request);

示例 3:添加自定义请求头

$request.headers['X-Custom-Header'] = 'value';
$request.headers['User-Agent'] = 'Mozilla/5.0';
$done($request);

获取现成脚本资源

知名脚本仓库

  1. NobyDa(去广告、解锁)

    https://github.com/NobyDa/Script

  2. chavyleung(签到脚本)

    https://github.com/chavyleung/scripts

  3. yichahucha(京东比价、微博去广告)

    https://github.com/yichahucha/surge

  4. 神机规则(综合性模块)

    https://github.com/ConnersHua/RuleGo

使用方法

复制 raw 链接 → 在 Shadowrocket 中 配置 → 模块 → 安装 from URL


调试与排错

查看日志

  • 设置日志 → 开启 脚本日志
  • 使用 console.log() 在脚本中输出调试信息

常见问题

  • 脚本不生效:检查 MITM 是否开启(HTTPS 必须),检查正则匹配是否正确
  • 无限循环:避免脚本修改后的请求再次匹配到同一规则
  • 性能问题:复杂脚本会增加耗电,避免在全局代理下运行过多脚本

本地脚本路径

iOS 本地脚本存储路径:文件 App → Shadowrocket → Scripts


注意事项

  1. HTTPS 解密:修改 HTTPS 响应必须安装并信任证书(配置 → 证书
  2. 权限风险:脚本可以读取所有流量内容,只使用可信来源的脚本
  3. iOS 限制:部分 App 使用 SSL Pinning,脚本无法解密
  4. 语法严格:JavaScript 区分大小写,注意 JSON 解析时的转义

推荐工作流

  1. 先使用现成模块测试
  2. 配置 → 通用 → HTTP 抓取 中分析请求结构
  3. 编写简单脚本本地测试
  4. 使用 GitHub 托管脚本并引用 raw 链接

需要具体某个功能的脚本示例(如特定 App 去广告或解锁),可以告诉我具体需求,我可以提供更精确的代码。

您可以还会对下面的文章感兴趣: