海康威视日志搜索REST API(POST METHOD)提供无效的XML格式

时间:2017-09-01 07:32:38

标签: xml rest

我想捕捉海康威视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

对此问题的任何帮助将不胜感激。

提前致谢。

5 个答案:

答案 0 :(得分:1)

我已经在我的测试系统上工作了,它需要对XML进行一些更改,因为它的格式不正确。 (之前的评论中提到了其中的一些)

  1. 确保您的结帐正确</timeSpan>,您错过了/
  2. 删除searchResultPosition和maxResults周围的空格(它仍然有效,但是不正确)
  3. 您错误了<endTIme>的开始标签,它应该是<endTime>,但没有大写字母I
  4. 最后,标签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)

有点晚。

  1. 您使用的是而不是
  2. 他们的文档不正确,请使用 RFC 2326 日期的绝对时间表示(至少对于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是错误的,这是文档:------------

enter image description here

    <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>