我收到UDP多播请求回复到239.255.255.250的回复
我使用XAddrs 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
那是什么
提前致谢
答案 0 :(得分:8)
当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>
并且也不要忘记大多数操作都需要在请求中包含授权标头。
<强> AUTHENTICATION 强>
在第35页的ONVIF Application Programmer's Guide中描述了如何完成身份验证。例如,它看起来像这样:
<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>
答案 1 :(得分:2)
@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";'
答案 2 :(得分:0)
在您的情况下,http://10.10.10.10:1234/onvif/device_service
是设备管理服务的地址。您需要根据SOAP协议发送GetSystemDateAndTime
请求。
如何发送此类请求取决于您正在使用的系统。您可以使用Visual Studio或gsoap(关于ONVIF有一个FAQ)