请求规则

大白2022年10月27日大约 5 分钟

亦搜使用 HTTP 协议收发请求。HTTP请求包括请求方法(GETPOST 等),请求头(headers),请求体(body)。有兴趣可查看《http请求消息数据格式详解》open in new window

请求规则主要用于搜索、发现、章节、正文的请求地址。

HTTP 请求简介

下面是一个 POST 请求的示例:

POST /search/error.html HTTP/1.1
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36
Content-Type: text/html; charset=UTF-8
Accept-Encoding: gzip, deflate
Content-Length: 19
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Connection: Keep-Alive

name=tom&pwd=123456

普通的 GET 请求

直接设置 URL 地址即可。如:

https://www.baidu.com/

带变量关键词的 GET 请求

基础变量

变量名可用规则描述
host全部规则域名 URL
keyword搜索地址规则搜索关键字
page地址规则地址规则当前页码
pageSize地址规则地址规则当前分页大小
cookie全部规则请求规则 cookie 数据
kind发现地址规则筛选模式 可用,栏目类别值

在请求的 URL 中可使用 $变量名 的方式使用以上变量。在运行时,会用变量的值替换变量关键词。

示例:

https://www.baidu.com/s?ie=UTF-8&wd=$keyword&page=$page

扩展变量

变量名可用规则描述
verificationCode('url')搜索地址规则获取验证码

获取验证码(只支持搜索地址规则)

使用 verificationCode('url') ,搜索时提供一个输入验证码的弹窗。弹窗中显示验证码图像和输入框。

示例:

https://www.baidu.com/s?ie=UTF-8&wd=$keyword&page=$page&code=$verificationCode('https://www.baidu.com/img/flexible/logo/pc/result.png')

设置编码方式 (encoding) 的 GET 请求

以爱奇文学为例。

他的搜索是一个带gbk编码的GET请求。搜索汉字 "玄幻",链接为:

http://www.iqiwx.com/modules/article/search.php?searchkey=%D0%FE%BB%C3&searchtype=articlename&page=1

可知玄幻的编码是 %D0%FE%BB%C3,去掉百分号即 D0FEBBC3,数字节得1汉字对于2字节,这是GBK编码特征,

使用 $keyword 替换搜索关键词,使用$page替换页码位置,指定编码 "encoding":"gbk",使用JSON写法如下:

{
    "url": "http://www.iqiwx.com/modules/article/search.php?searchkey=$keyword&searchtype=articlename&page=$page",
    "encoding": "gbk"
}

自定义 header 的 GET 请求

如果需要携带请求头信息,则加上 headers。有两种方式:

{
    "url": "/modules/article/search.php?searchkey=$keyword&searchtype=articlename&page=$page",
    "headers":{
        "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 Edg/84.0.522.40"
    }
}

提示

图像规则,如封面图,可在得到图像的 url 后使用下面的方式指定获取图像的http 请求header:

格式为: url@headers{"name":"value",...}

示例:

http://www.iqiwx.com/logo.jpg@headers{"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 Edg/84.0.522.40"}

POST 请求

因为 POST 请求不像 GET 请求那样,可以只有一个 URL 地址,所以都会是以 JSON 的写法来。

GET 请求 JSON 写法的内容同样适用于 POST 请求。其实只是 method 不一样。

示例1:

{
    "url": "http://www.iqiwx.com/modules/article/search.php",
    "method": "POST",
    "body": "searchkey=$keyword&searchtype=articlename",
    "headers": {
        "Content-Type": "application/x-www-form-urlencoded"
    }
}

示例2:

{
    "url": "http://www.iqiwx.com/modules/article/search.php",
    "method": "POST",
    "body": {
        "searchkey": "$keyword",
        "searchtype": "articlename"
    }
}

示例3: POST包含表单和JSON

{
    "url": "/modules/article/search.php",
    "method": "POST",
    "body": "{\"searchkey\": \"$keyword\",\"searchtype\": \"articlename\"}",
    "headers":{
        "Content-Type": "application/json"
    }
}

提示

可在 url 字符串或JSON后使用下面的方式获取需要的 cookie:

格式为: url@cookie:key1|key2|...|kn

举例:获取响应 set-cookie 中的 key 值:

{
    "url": "http://www.iqiwx.com/modules/article/search.php",
    "method": "POST",
    "body": ...
}@cookie:key

设置请求的最大重定向次数

使用JSON写法时,亦搜大白版允许使用 maxRedirects 参数来设置最大允许重定向次数,如果设为 0 则禁止重定向。如果不设置,默认为 5

示例: 设置重定向次数的POST请求

{
    "url": "/modules/article/search.php",
    "method": "POST",
    "body": "{\"searchkey\": \"$keyword\",\"searchtype\": \"articlename\"}",
    "headers":{
        "Content-Type": "application/json"
    },
    "maxRedirects": 0
}

提示

大白版 V3.6.0 开始正式支持 maxRedirects 最大重定向次数设置。

配合 @js 规则

@js:
({
    "url": "/modules/article/search.php",
    "method": "POST",
    "body": JSON.stringify({
        "searchkey": keyword,
        "searchtype": "articlename"
    }),
    "headers":{
        "Content-Type": "application/json"
    }
})

提示

模板只是参考,要根据实际情况按需使用,所有写法都有js写法,不妨试试。

高级 @http: 规则

可以在多个规则之间,使用 @http: 请求 HTTP 资源。

例子:

  1. 将上一个规则返回的返回内容作为请求 url ,发起请求,并将响应结果返回。
// 获取百度首页的html内容
@js:'http://www.baidu.com/';@http:1
  1. 检测上一个规则返回的结果是否符合条件(正则匹配),如果不符合才发起请求,否则直接返回上一次的结果
// 判断上一次的结果中是否包含 ".m3u8" , 如果没有才请求
// 格式: @http:1@@regexp
@js:lastResult;@http:1@@.m3u8

提示

@http: 规则有结果缓存,在一些情况下能提升效率。

其它

跳过请求

有时候,我们并不需要发起 HTTP 请求,这个时候,可以在请求规则中写上 null 。此时,会将地址规则中的 result 作为请求结果向下传递。

贯穿章节模式

当章节地址规则 chapterUrl 为空 null ,并且章节列表规则 chapterList 为空时, 自动启用章节贯穿模式。

有时候,我们搜索或发现列表的数据已经是最终数据,不需要再获取章节数据时,可以使用此模式,简化规则编写。

此模式下会自动添加一个 阅读查看 的章节,并以章节地址规则的 result 作为结果向下传递。

上次编辑于:
贡献者: yangyxd