7

一旦我收到从 UDP 多播请求返回到 239.255.255.250 的响应

我用 XAddrs 取回 ProbeMatch http://10.10.10.10:1234/onvif/device_service

我现在如何执行 GetSystemDateAndTime 和 GetDeviceInformation

这是对 10.10.10.10 端口 1234 的 TCP/UDP 请求吗?这是对 10.10.10.10 端口 80 的 HTTP 请求吗?

或者什么一旦我有了设备的地址 http:10.10.10.10:1234/onvif/device_service

然后呢

提前致谢

4

3 回答 3

9

由于 SOAP 通过 HTTP 工作,因此您只需向那里发送一个 HTTP 请求。例如通过 CURL,它会是这样的:

curl 10.10.10.10:1234/onvif/device_service -d '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetSystemDateAndTime xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>'

结果,您将获得带有一些标题的类似内容:

<tds:GetSystemDateAndTimeResponse>
    <tds:SystemDateAndTime>
        <tt:DateTimeType>Manual</tt:DateTimeType>
        <tt:DaylightSavings>false</tt:DaylightSavings>
        <tt:TimeZone>
            <tt:TZ>MoroccoStandardTime0</tt:TZ>
        </tt:TimeZone>
        <tt:UTCDateTime>
            <tt:Time>
                <tt:Hour>10</tt:Hour>
                <tt:Minute>5</tt:Minute>
                <tt:Second>35</tt:Second>
            </tt:Time>
            <tt:Date>
                <tt:Year>2014</tt:Year>
                <tt:Month>3</tt:Month>
                <tt:Day>14</tt:Day>
            </tt:Date>
        </tt:UTCDateTime>
    </tds:SystemDateAndTime>
</tds:GetSystemDateAndTimeResponse>

并且不要忘记大多数操作都需要在请求中包含授权标头。

验证

在第 35 页的 ONVIF 应用程序程序员指南中描述了如何完成身份验证。例如,它看起来像这样:

<s:Header>
    <Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <UsernameToken>
            <Username>admin</Username>
            <Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">MuMnyh3wTxGWOCc=</Password>
            <Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">8Qqve9KCkNhQAAAAAAA==</Nonce>
            <Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2014-03-04T14:03:05.130Z</Created>
        </UsernameToken>
    </Security>
</s:Header>
于 2014-03-14T10:08:06.487 回答
3

@Kirix 解决方案不适用于我的特定相机。然而,经过大量的代码研究和跟踪/错误。我确定我拥有的 Trendnet 相机坚持标题是完美的。我想出了一个卷曲变化:

curl http://192.168.xxx.xxx/onvif/device_service --data '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetSystemDateAndTime xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>' --header 'Content-Type: application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime";'
于 2014-03-21T19:16:22.903 回答
0

在您的情况下http://10.10.10.10:1234/onvif/device_service是设备管理服务的地址。GetSystemDateAndTime您需要根据 SOAP 协议发送请求。

如何发送此类请求取决于您正在使用的系统。您可以使用 Visual Studio 或 gsoap(有一个关于 ONVIF的常见问题解答)

于 2014-03-05T10:39:13.850 回答