Python调用大华DVR CGI API遇401认证失败问题求助
问题:调用大华DVR CGI API始终返回401状态码
我是Python初学者,近期尝试调用大华DVR的CGI API实现多种功能,但初始阶段就遇到问题:无论尝试何种配置,请求API始终返回401状态码。
以下是测试用DVR的型号及当前配置信息:
- 型号:DH/HCVR5104HS-V6/-AF-DVR-II-A/4-1
- 软件版本:V4.001.0000000.16
- 硬件版本:V1.0
- Web版本:V3.2.7.144755
- SSL:False
测试代码示例:
from requests import get res = get("http://192.168.0.50:1234/cgi-bin/global.cgi?action=getCurrentTime", auth=("user","pass")) print(res.status_code) ## return 401
from requests import get res = get("http://user:pass@192.168.0.50:1234/cgi-bin/global.cgi?action=getCurrentTime") print(res.status_code) ## return 401
我还尝试添加从管理页面下载的CA证书作为cert参数,但显然无效。
请问是否可以通过Python获取大华DVR/NVR的配置信息?或者在此场景下如何正确使用认证?恳请各位提供帮助。
回答
1. 明确大华DVR的认证机制
大华部分型号的CGI API不支持HTTP Basic认证,而是采用表单登录+Cookie会话绑定的模式,必须先调用登录接口获取有效会话凭证,再发起后续API请求。
2. 正确的认证请求流程
步骤1:调用登录接口获取会话Cookie
先向设备的登录CGI接口发送POST请求,携带账号密码获取认证Cookie,后续请求复用该会话即可:
import requests # 登录接口地址,部分型号可能为/userLogin.cgi,需参考对应设备文档 login_url = "http://192.168.0.50:1234/cgi-bin/userLogin.cgi" login_data = { "username": "your_username", "password": "your_password" } # 创建会话对象,自动维护Cookie session = requests.Session() # 发送登录请求,部分设备需指定Content-Type为application/x-www-form-urlencoded login_res = session.post(login_url, data=login_data) # 验证登录结果,可根据状态码或响应内容判断 if login_res.status_code == 200: print("登录成功") else: print(f"登录失败,状态码:{login_res.status_code}")
步骤2:使用会话请求目标API
登录成功后,用同一个Session对象发起API请求,会话会自动携带认证Cookie:
# 请求获取当前时间的API time_api_url = "http://192.168.0.50:1234/cgi-bin/global.cgi?action=getCurrentTime" api_res = session.get(time_api_url) print(f"请求状态码:{api_res.status_code}") print(f"响应内容:{api_res.text}")
3. 额外排查点
- 账号权限:确认使用的账号拥有API访问权限,部分设备需手动开启账号的「远程控制」或「API调用」权限。
- 接口路径:不同型号的大华设备CGI接口路径可能存在差异,建议查阅对应型号的《CGI开发指南》确认接口地址。
- 密码加密:部分设备要求密码进行MD5加密后传输,可尝试将密码做MD5哈希处理后再传入请求体。
4. 获取配置信息的可行性
通过正确认证后,可调用对应CGI接口获取设备配置,例如:
- 获取系统基础信息:
/cgi-bin/global.cgi?action=getSystemInfo - 获取通道配置:
/cgi-bin/channel.cgi?action=getChannelInfo
具体接口需参考官方提供的CGI文档。
内容的提问来源于stack exchange,提问作者TYeung
相关产品推荐
相关产品推荐

