海康 8200 SDK 封装

结果放在最前面:
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 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 封装)