基于实际抓包分析整理,适用于海康威视网络摄像头
ISAPI(IP Surveillance API)是海康威视设备的标准 HTTP API 接口,用于设备配置、实时预览、PTZ 控制等功能。
PTZ(Pan-Tilt-Zoom)云台控制,支持:
海康摄像头 Web 界面使用 Session 认证,而非 Basic Auth。
认证流程:
http://{ip}/doc/page/preview.aspWebSession_{id}={token}| Header | 格式 | 说明 |
|---|---|---|
| Cookie | WebSession_{id}={token} |
Session Token |
| SessionTag | {hash} |
请求验证标识 |
登录后,可以从浏览器开发者工具中获取:
Cookie 和 SessionTag Header持续向某个方向移动,直到发送停止命令。
端点
PUT /ISAPI/PTZCtrl/channels/{channel}/continuous
参数
channel: 通道号,通常为 1请求头
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: WebSession_{id}={token}
SessionTag: {hash}
X-Requested-With: XMLHttpRequest
If-Modified-Since: 0
请求体(XML)
<?xml version="1.0" encoding="UTF-8"?>
<PTZData>
<pan>{pan_value}</pan>
<tilt>{tilt_value}</tilt>
</PTZData>
| 参数 | 范围 | 说明 |
|---|---|---|
| pan | -100 ~ 100 | 水平转动速度,负值向左,正值向右 |
| tilt | -100 ~ 100 | 垂直转动速度,负值向下,正值向上 |
| zoom | -100 ~ 100 | 变焦速度,负值缩小,正值放大 |
| 方向 | pan | tilt | 说明 |
|---|---|---|---|
| 上 | 0 | 60 | 向上转动 |
| 下 | 0 | -60 | 向下转动 |
| 左 | -60 | 0 | 向左转动 |
| 右 | 60 | 0 | 向右转动 |
| 左上 | -60 | 60 | 斜向左上 |
| 右上 | 60 | 60 | 斜向右上 |
| 左下 | -60 | -60 | 斜向左下 |
| 右下 | 60 | -60 | 斜向右下 |
| 停止 | 0 | 0 | 停止移动 |
注:数值 60 是推荐的移动速度,可根据需要调整(1-100)
curl 'http://192.168.0.64/ISAPI/PTZCtrl/channels/1/continuous' \
-X 'PUT' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
-H 'Cookie: WebSession_8febb54dd5=1ca674cedc0b6ffddacf1eb4ecfa3016127c90104527f1ecf8ef88ca09bd2ef1' \
-H 'SessionTag: 7615ce65f40480305568ed02726ac67e89452590e58244976c836b22daeff522' \
-H 'X-Requested-With: XMLHttpRequest' \
-H 'If-Modified-Since: 0' \
--data-raw '<?xml version="1.0" encoding="UTF-8"?><PTZData><pan>60</pan><tilt>0</tilt></PTZData>'
curl 'http://192.168.0.64/ISAPI/PTZCtrl/channels/1/continuous' \
-X 'PUT' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
-H 'Cookie: WebSession_xxx=xxx' \
-H 'SessionTag: xxx' \
--data-raw '<?xml version="1.0" encoding="UTF-8"?><PTZData><pan>0</pan><tilt>60</tilt></PTZData>'
curl 'http://192.168.0.64/ISAPI/PTZCtrl/channels/1/continuous' \
-X 'PUT' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
-H 'Cookie: WebSession_xxx=xxx' \
-H 'SessionTag: xxx' \
--data-raw '<?xml version="1.0" encoding="UTF-8"?><PTZData><pan>0</pan><tilt>0</tilt></PTZData>'
基于实际抓包的完整请求头:
PUT /ISAPI/PTZCtrl/channels/1/continuous HTTP/1.1
Host: 192.168.0.64
Accept: */*
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: no-cache
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: language=en; WebSession_8febb54dd5=1ca674cedc0b6ffddacf1eb4ecfa3016127c90104527f1ecf8ef88ca09bd2ef1
If-Modified-Since: 0
Origin: http://192.168.0.64
Pragma: no-cache
Referer: http://192.168.0.64/doc/page/preview.asp
SessionTag: 7615ce65f40480305568ed02726ac67e89452590e58244976c836b22daeff522
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36
X-Requested-With: XMLHttpRequest
<?xml version="1.0" encoding="UTF-8"?><PTZData><pan>60</pan><tilt>0</tilt></PTZData>
浏览器前端直接请求摄像头会遇到跨域问题(CORS),解决方案:
pan=0, tilt=0http://{ip}/doc/page/preview.asp| 日期 | 内容 |
|---|---|
| 2026-01-09 | 初始版本,基于实际抓包整理 |