美文网首页
海康 8200 SDK 封装

海康 8200 SDK 封装

作者: Eniso | 来源:发表于2019-12-16 16:55 被阅读0次

    结果放在最前面:
    https://github.com/En1s0o/hik8200-cas

    最近海康 PVIA 将升级到海康 IOT,在此分享 PVIA 的封装
    直达电梯 https://www.jianshu.com/p/0e76390b6bd1

    背景

    海康 8200 部分功能只能在页面上操作(例如:添加设备),而 SDK 并没有提供相关 API,这对后端代码而言是相当不便的。这个项目正是为解决这个问题而生。

    项目使用到的开源库

    • Jackson
    • Guava
    • OkHTTP3
    • Retrofit2
    • BouncyCastle
    • Jsoup

    提供的接口

    public Object flatRequest(CasFlatRequest flatRequest) throws Exception;
    
    • CasFlatRequest.java
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class CasFlatRequest {
    
        @JsonProperty(value = "method", required = true)
        private String method;
    
        @JsonProperty(value = "url", required = true)
        private String url;
    
        @JsonProperty("values")
        private Map<String, String> values;
    
    }
    

    内部流程

    调用 flatRequest 发起一次请求:
    1、没有登录,或者会话过期
    (a) 海康 8200 会要求重定向到登录页面
    经过本人测试,海康 8200 的 POST 在首次登录总是失败的。因此如果原始请求为非 GET 请求,本 SDK 会拦截返回的数据,并修改重定向的地址到一个返回数据较少的 GET 请求(/vms/deviceInfo!getTypeData.action)。只有该 GET 接口成功返回(说明登录成功),才会再次发出原始的请求,得到正确的数据。
    当然了,如果原始请求就是 GET 请求,这里则不会修改重定向的地址,也不会多发最后那次请求。
    (b) 解析 html 页面,得到登录表单,并附加一些登录相关的信息,例如:用户名、加密后的密码等等
    (c) 发出登录请求
    (d) 一系列重定向
    如果原始请求非 GET 请求(例如:POST),这里会再次发出原始请求,因为登录成功的重定向地址已经改为一个返回数据较少的 GET 请求,而非原始请求。
    2、已经登录,且会话有效(只要海康 8200 不要求重定向到登录页面)
    (a) 发起请求,返回结果

    例如,显示添加设备的窗口编号的网络交互过程:
    https://github.com/En1s0o/hik8200-cas/blob/master/showAddDeviceWindowN.action.log

    相关文章

      网友评论

          本文标题:海康 8200 SDK 封装

          本文链接:https://www.haomeiwen.com/subject/zzjdnctx.html