跳转至

开源阅读源制作登陆示例

预计阅读时长 : 2 分钟

登陆界面 (loginUi)

通过 loginUi 定义登陆界面,可以通过弹出窗口右上角的 进行登录操作。

此外,还能添加 注册 等动作按钮的名称和点击后调用的函数。

[
    {
        "name": "telephone",
        "type": "text"
    },
    {
        "name": "password",
        "type": "password"
    },
    { 
        "name": "获取验证码",
        "type": "button",
        "action": "getVerificationCode()"
    }
    {
        "name": "注册",
        "type": "button",
        "action": "http://www.yooike.com/xiaoshuo/#/register?title=%E6%B3%A8%E5%86%8C"
    }
]

登陆地址 (loginUrl)

登录地址中的 login 函数必须实现,用于获取登录信息并设置 header,以便后续流程中涉及网络请求的地方使用。

getVerificationCode() 函数则对应了登录界面中的 获取验证码 按钮,用于获取验证码。

function login() {
   var loginInfo = source.getLoginInfo()
   var json = java.connect('https://www.kaixin7days.com/login,{"method":"POST","body":' + loginInfo + '}').body()
   var loginRes = JSON.parse(json)
   var header = null
   if (loginRes.statusCode == 200) {
      var accessToken = {
         Authorization: "Bearer " + loginRes.content.accessToken
      }
      header = JSON.stringify(accessToken)
      source.putLoginHeader(header)
   }
}

function getVerificationCode() {
    java.log("登录UI按钮:获取到手机号码"+result.get("telephone"))
}

发现地址 (exploreUrl)

在发现地址中,可以通过 source.getLoginHeader() 获取从登录地址中获取到的 header,实现登录状态访问。

@js: 
var header = JSON.parse(source.getLoginHeader())
var json = ''
var j = null
if (header != null) { 
    json = java.connect('https://www.kaixin7days.com/book-service/bookMgt/getBookCategroy,{"method":"POST","body":{}}', header).body() 
    j = JSON.parse(json) 
 } 
if(j == null || j.statusCode != 200) {
    source.login()
    java.getHeaderMap().putAll(source.getHeaderMap(true))
    json = java.connect('https://www.kaixin7days.com/book-service/bookMgt/getBookCategroy,{"method":"POST","body":{} }', header).body() 
    j = JSON.parse(json) 
 } 
var fls = j.content
var fx = []
for(var i = 0; i < fls.length; i++) { 
    fx.push({ 
        title: fls[i].categoryName, 
        url: '/book-service/bookMgt/getAllBookByCategroyId,{"method":"POST","body":{"categoryIds": "' + fls[i].associationCategoryIDs + '","pageNum": {{page}},"pageSize": 100}}'
 }) 
 } 
JSON.stringify(fx)

搜索地址

1
2
3
4
5
6
7
8
9
https://www.kaixin7days.com/book-service/bookMgt/findBookName,
    {
        "method":"POST",
        "body":{
            "title": {{key}},
            "pageNum": {{searchPage}},
            "pageSize": 100
            }
        }

登陆检测 (loginCheckJs)

登录检测脚本的主要作用是对当前页面的返回值进行判断,确定是否符合登录后返回值的预期,并根据返回值进行相应的处理。

如下代码中,如果返回值不符合预期,则重新执行登录流程,如果符合预期,则返回 result 代表的 responseBody 对象供后续规则使用。

var response = result
var body = JSON.parse(result.body())
if (body.statusCode == 301) {
    source.login()
    java.getHeaderMap().putAll(source.getHeaderMap(true))
    response = java.getStrResponse()
} else if (body.statusCode == 200) {
    return response
} else {
    throw body.message
}
response