认证与登录 (Authentication)
Legado 支持通过 CookieJar、登录 UI 表单和登录 URL 脚本三种方式实现网站认证。
1. CookieJar
启用后自动保存每次响应头中的 Set-Cookie 值,适用于需要 session 的网站(如验证码图片)。
在源编辑器中勾选「启用 CookieJar」即可,无需额外配置。
2. 登录 UI (Login UI)
通过 JSON 数组定义登录表单,替代内置 WebView 登录方式。
字段定义
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
name | String | 是 | 字段名称,显示为输入框标签 |
type | String | 是 | 字段类型 |
action | String | 否 | 仅 button 类型:点击时执行的动作 |
style | Object | 否 | Flexbox 布局配置 |
type 取值
| 值 | 说明 |
|---|---|
text | 文本输入框 |
password | 密码输入框 |
button | 可点击按钮,action 为 URL 时打开浏览器,为函数名时调用 JS |
JSON 示例
json
[
{ "name": "telephone", "type": "text" },
{ "name": "password", "type": "password" },
{
"name": "注册",
"type": "button",
"action": "http://www.example.com/register"
},
{
"name": "获取验证码",
"type": "button",
"action": "getVerificationCode()",
"style": {
"layout_flexGrow": 0,
"layout_flexShrink": 1,
"layout_alignSelf": "auto",
"layout_flexBasisPercent": -1,
"layout_wrapBefore": false
}
}
]style 布局属性
| 属性 | 类型 | 说明 |
|---|---|---|
layout_flexGrow | Int | 弹性增长比例 |
layout_flexShrink | Int | 弹性收缩比例 |
layout_alignSelf | String | 交叉轴对齐方式 |
layout_flexBasisPercent | Int | 基础尺寸百分比,-1 为自动 |
layout_wrapBefore | Boolean | 是否强制换行 |
版本变更
从版本 20221113 起,按钮支持调用「登录 URL」规则中的函数,必须实现 login 函数。
3. 登录 URL (Login URL)
可填写登录链接或实现登录逻辑的 JavaScript。配合登录 UI 使用时,需要实现 login 函数。
JS 示例
js
function login() {
java.log("模拟登录请求");
java.log(source.getLoginInfoMap());
}
function getVerificationCode() {
java.log("登录UI按钮:获取到手机号码" + result.get("telephone"))
}获取登录信息
在登录按钮函数和 login 函数中,可通过以下方式获取用户输入:
js
// 登录按钮函数中
result.get("telephone")
// login 函数中
source.getLoginInfo()
source.getLoginInfoMap().get("telephone")source 登录相关方法
| 方法 | 返回值 | 说明 |
|---|---|---|
login() | — | 执行登录 |
getHeaderMap(hasLoginHeader) | Map | 获取请求头 |
getLoginHeader() | String? | 获取登录头字符串 |
getLoginHeaderMap() | Map? | 获取登录头 Map |
putLoginHeader(header) | — | 保存登录头 |
removeLoginHeader() | — | 清除登录头 |
setVariable(variable) | — | 设置源变量 |
getVariable() | String? | 获取源变量 |
AnalyzeUrl 函数
以下函数仅在「登录检查 JS」规则中有效:
| 方法 | 返回值 | 说明 |
|---|---|---|
initUrl() | — | 重新解析 URL |
getHeaderMap().putAll(source.getHeaderMap(true)) | — | 重新设置登录头 |
getStrResponse(jsStr, sourceRegex) | StrResponse | 返回文本类型的访问结果 |
getResponse() | Response | 返回 Response 类型的访问结果 |
4. 登录检查 JS (Login Check)
在源的「登录检查 JS」字段中填写 JavaScript,用于判断当前登录状态。返回 true 表示已登录,返回其他值会触发重新登录流程。
