Skip to content

如何使用脚本过滤功能? #1

Description

@cute

如何使用脚本过滤功能?

脚本过滤是2.1.24版本增加的一个功能,可以通过js脚本来处理HTTP请求和返回数据。

如何开启脚本过滤?

在配置文件里增加了 [Filter] 项目,支持 enablescript 两个参数。

  • enable 支持 true 或者 false,表示开启或者关闭过滤功能。
  • script 的值为 Base64 编码后的过滤脚本内容。

示例:

[Filter]
enable=true
script=...

如何指定规则开启脚本过滤?

Shadowrocket 增加了一个新的可选项:script-filter

[Rule]
DOMAIN,example.com,DIRECT,script-filter
DOMAIN,example.net,PROXY,script-filter

[URL Rewrite]
^http://example.com/robots.txt _ DIRECT script-filter
^http://example.net/robots.txt _ PROXY script-filter

如何编写过滤脚本?

过滤脚本需要提供 scriptFilterExecutescriptFilterFree 两个方法, 运行环境提供了 HTTPParser 处理类用于解析 HTTP 请求和返回数据。

scriptFilterExecute(args)

过滤请求和返回数据。

参数字段:
type:REQUEST 或 RESPONSE
uuid:HTTP 请求 UUID
url:HTTP 请求 URL
data:HTTP 原始数据
response:回调函数
返回数据:
string:修改后的数据
boolean:关闭连接
undefined:不修改
null:退出过滤。如有资源要释放,需要自己调用scriptFilterFree

示例:

function scriptFilterExecute(args) {
    console.log('filter ' + args.uuid);
    console.log('url ' + args.url);
}

scriptFilterFree(uuid)

释放相关资源。

参数:
HTTP 请求 UUID

示例:

function scriptFilterFree(uuid) {
    console.log('free ' + uuid);
}

资源:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions