我想捕捉海康威视DVR的日志详情。要捕获日志,HikVision在其RACM规范文档中提供REST Web服务。 当我接受服务时,我得到 badXMLFormat 响应错误。
请在下面找到问题的详细说明。
设备名称:嵌入式网络硬盘录像机
产品编号:DS-7208HQHI-F1
固件版本:V3.4.80
服务网址:http://myDVRStaticIPAddress/ISAPI/ContentMgmt/logSearch 方法:POST
<?xml version="1.0" encoding="UTF-8"?>
<CMSearchDescription version="1.0"
xmlns="http://www.isapi.org/ver20/XMLSchema">
<searchID>{812F04E0-4089-11A3-9A0C-0305E82C2906}</searchID>
<timeSpanList>
<timeSpan>
<startTime>2013-06-10T12:00:00Z</startTime>
<endTIme>2013-06-10T13:30:00Z</endTime>
<timeSpan>
</timeSpanList>
<metaID>log.hikvision.com/Alarm/motionstart</metaID>
<searchResultPostion> 20 </searchResultPostion>
<maxResults> 40 </maxResults>
</CMSearchDescription>
<?xml version="1.0" encoding="UTF-8" ?>
<ResponseStatus version="1.0" xmlns="urn:psialliance-org">
<requestURL>/ISAPI/ContentMgmt/logSearch</requestURL>
<statusCode>5</statusCode>
<statusString>Invalid XML Format</statusString>
<subStatusCode>badXmlFormat</subStatusCode>
</ResponseStatus>
我正在为上述服务获取statusCode 5
。似乎我的输入xml(CMSearchDescription)格式不正确或未更新格式。
服务名称: / ISAPI / ContentMgmt / logSearch
对此问题的任何帮助将不胜感激。
提前致谢。
答案 0 :(得分:1)
我已经在我的测试系统上工作了,它需要对XML进行一些更改,因为它的格式不正确。 (之前的评论中提到了其中的一些)
</timeSpan>
,您错过了/
<endTIme>
的开始标签,它应该是<endTime>
,但没有大写字母I
。metaID
应该为metaId
,且大写字母为D
此外,由于该类别中没有任何匹配项,因此我无法完全测试您的metaId标记。
这个log.std-cgi.com
肯定会拉回所有日志条目,而这个log.std-cgi.com/Alarm
返回所有警报条目。
这是完整的Xml
<?xml version='1.0' encoding='UTF-8'?>
<CMSearchDescription version='1.0' xmlns='http://www.isapi.org/ver20/XMLSchema'>
<searchID>{812F04E0-4089-11A3-9A0C-0305E82C2906}</searchID>
<timeSpanList>
<timeSpan>
<startTime>2013-06-10T12:00:00Z</startTime>
<endTime>2013-06-10T13:30:00Z</endTime>
</timeSpan>
</timeSpanList>
<metaId>log.hikvision.com/Alarm/motionstart</metaId>
<searchResultPostion>20</searchResultPostion>
<maxResults>40</maxResults>
</CMSearchDescription>
答案 1 :(得分:0)
海康威视/安科设备错误地返回内容类型。
您将在HTTP响应标头中看到以下内容:
Content-Type: application/xml; charset="UTF-8"
请注意&#34; UTF-8&#34;
您的HTTP客户端无法确定字符集&#34; UTF-8&#34;双引号。如果您可以在XML解析器读取内容之前修改响应头,那么您应该满足要求。将标题更改为Content-Type: application/xml; charset=utf-8
双引号字符集是标准的一部分,并受到大多数浏览器的尊重。
答案 2 :(得分:0)
有点晚。
xmlns="http://www.isapi.org/ver20/XMLSchema"
而言)3.7绝对时间
Absolute time is expressed as ISO 8601 timestamps, using UTC (GMT). Fractions of a second may be indicated. utc-range = "clock" "=" utc-time "-" [ utc-time ] utc-time = utc-date "T" utc-time "Z" utc-date = 8DIGIT ; < YYYYMMDD > utc-time = 6DIGIT [ "." fraction ] ; < HHMMSS.fraction > Example for November 8, 1996 at 14h37 and 20 and a quarter seconds UTC: 19961108T143720.25Z
答案 3 :(得分:0)
如果您复制了海康威视的示例,则可能是在“ endTime”字符串上重写了endTime打开和关闭标签时出错,可以解决您的问题。
可能对您来说很晚,但对其他用户来说很有趣。
答案 4 :(得分:0)
如何获取设备的ID:
我执行了xml校正,但是得到了以下结果:
<?xml version="1.0" encoding="UTF-8"?>
<CMSearchResult version="2.0"
xmlns="http://www.hikvision.com/ver20/XMLSchema">
<searchID>{{Abc12345}}</searchID>
<responseStatus>true</responseStatus>
<responseStatusStrg>NO MATCHES</responseStatusStrg>
<numOfMatches>0</numOfMatches>
<matchList>
</matchList>
</CMSearchResult>
---------相信ID是错误的,这是文档:------------
<CMSearchDescription version="1.0" xmlns=" http://www.std-
cgi.org/ver20/XMLSchema">
<searchID><!-- req, xs: uuid --></searchID>
<timeSpanList>
<timeSpan>
<startTime><!-- req, xs:time, ISO8601 time --></startTime>
<endTIme><!-- req, xs:time, ISO8601 time --></endTime>
<timeSpan>
</timeSpanList>
<metadataList>
<metadata>
<metadataDescriptor><!-- req, xs:string --></metadataDescriptor>
<SearchProperity>
<plateSearchMask><!-- opt, xs:string,1-31 --></plateSearchMask>
<stateOrProvince><!-- opt, xs:interger --></stateOrProvince>
<nation> <!-- opt, xs:string,”EU,ER” --> </nation>
</SearchProperity>
</metadata>
</metadataList>
<searchResultPosition> <!-- opt, xs: interger -->
</searchResultPosition>
<maxResults><!-- opt, xs: interger --></maxResults>
</CMSearchDescription>