海康 8200 SDK 封装

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

最近海康 PVIA 将升级到海康 IOT,在此分享 PVIA 的封装
直达电梯 //www.greatytc.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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 主要介绍CAS SSO的认证流程。有关这方面的内容再网上也有很多资料,写这篇总结目的一来是自己在理解这块内容的时候...
    spilledyear阅读 9,871评论 1 17
  • 2系列200 OK请求已成功,请求所希望的响应头或数据体将随此响应返回。201 Created请求已经被实现,而且...
    Y像梦一样自由阅读 3,636评论 1 5
  • [TOC] 简单登录 client:提供用户名和密码或者是其他的认证凭证 server:验证client提供的认证...
    吃火龙果吐芝麻阅读 1,631评论 0 4
  • 转载自:http://blog.csdn.net/turkeyzhou/article/details/55097...
    大诗兄_zl阅读 2,497评论 0 3
  • Getting Started Burp Suite 是用于攻击web 应用程序的集成平台。它包含了许多工具,并为...
    Eva_chenx阅读 28,885评论 0 14