Запрос ONVIF GetSystemDateAndTime

Как только я получу ответ от многоадресного запроса UDP на 239.255.255.250

Я возвращаю ProbeMatch с XAddrs http://10.10.10.10:1234/onvif/device_service

Как мне теперь сделать GetSystemDateAndTime и GetDeviceInformation

Это запрос TCP/UDP на порт 10.10.10.10 1234? Это HTTP-запрос на порт 80 10.10.10.10?

Или Что Когда у меня есть адрес устройства http:10.10.10.10:1234/onvif/device_service

Тогда что

заранее спасибо


person NewDev    schedule 04.03.2014    source источник


Ответы (3)


Вам нужно отправить туда только HTTP-запрос, так как SOAP работает через 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>

А также не забывайте, что для большинства действий требуются заголовки авторизации, включенные в запрос.

АУТЕНТИФИКАЦИЯ

В Руководстве программиста приложений ONVIF на стр. 35 описано, как делается авторизация. Например, это выглядит так:

<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>
person Kin    schedule 14.03.2014
comment
Я знаю, что GetSystemDateAndTimeResponse не требует аутентификации. у вас есть пример curl команды, которая требует имя пользователя/пароль? - person RoundSparrow hilltx; 21.03.2014
comment
скажите, пожалуйста, как запросить услугу onvif, у меня есть IP-камера, и я хочу использовать функции PTZ с помощью службы OnVif. помогите пожалуйста срочно нужно заранее спасибо - person Bhavesh Desai; 18.12.2015

Решение @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";'
person RoundSparrow hilltx    schedule 21.03.2014

В вашем случае http://10.10.10.10:1234/onvif/device_service — это адрес службы управления устройствами. Вам необходимо отправить GetSystemDateAndTime запрос по протоколу SOAP.

Способ отправки таких запросов зависит от системы, в которой вы работаете. Вы можете использовать Visual Studio или gsoap (есть часто задаваемые вопросы о ONVIF)

person Ottavio Campana    schedule 05.03.2014