Перейти к контенту
Форум о видеонаблюдении

Рекомендуемые сообщения

Добрый день! Два дня уже бьюсь. Есть задача интеграции в наш WEB сервер вашего WEB сервера. Оба сервера на одном компьютере, пока.

Видео получаю, методы GET выполняются. Метод PUT для управления камерой - ни в какую. Браузер в консоле выдаёт что это запрещено CORS политикой.

Формирую запрос вида

const response = fetch(url, {
        method: 'PUT', // *GET, POST, PUT, DELETE, OPTION etc.
        mode: 'cors', // no-cors, *cors, same-origin
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(json) // body data type must match "Content-Type" header
    })

Что я делаю не так, и как надо?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте !
1.) Как реализуется авторизация этого запроса?
2.) Нужны полный запрос клиента и ответ сервера (со всеми заголовками, скопированные, например, через консоль разработки).
Возможно, сначала уходит какой-нибудь OPTIONS и сервер отвечает, что он не поддерживается.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для метода PUT пробовал url вида 'http://192.168.1.32:9786/cameras/0/ptz/zoom/relative?authorization=Basic%20' + utf8_to_b64(user + ':' pass)

Пробовал перед эти запросом посылать метод get для url 'http://192.168.1.32:9786/cameras/0?authorization=Basic%20' + utf8_to_b64(user + ':' pass)

Get - проходит, Put - нет. Put считается "сложным" запросом, и да, перед ним браузер сам формирует запрос OPTIONS, на что получает такой ответ в консоле -

index.html:1 Access to fetch at 'http://192.168.1.32:9786/cameras/0/ptz/zoom/relative?authorization=Basic%20d2ViOmFkbWlu' from origin 'http://192.168.1.32:8088' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
ptz_utils.js:61 PUT http://192.168.1.32:9786/cameras/0/ptz/zoom/relative?authorization=Basic%20d2ViOmFkbWlu net::ERR_FAILED
putCom_URL @ ptz_utils.js:61
runPTZ @ ptz_utils.js:128
onclick @ index.html:1
index.html:1 Uncaught (in promise) TypeError: Failed to fetch

 И такой во вкладке Network

Request URL: http://192.168.1.32:9786/cameras/0/ptz/zoom/relative?authorization=Basic%20d2ViOmFkbWlu
Request Method: OPTIONS
Status Code: 405 Method Not Allowed
Remote Address: 192.168.1.32:9786
Referrer Policy: no-referrer-when-downgrade

Access-Control-Allow-Origin: *
Connection: Keep-Alive
Content-Length: 169
Content-Type: text/html; charset=UTF-8
Date: Wed, 29 Jul 2020 09:40:34 GMT
Server: Devline Linia Server

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Access-Control-Request-Headers: content-type
Access-Control-Request-Method: PUT
Connection: keep-alive
Host: 192.168.1.32:9786
Origin: http://192.168.1.32:8088
Referer: http://192.168.1.32:8088/index.html
Sec-Fetch-Mode: cors
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 OPR/69.0.3686.77

authorization: Basic d2ViOmFkbWlu

Если из url убрать часть ?authorization=Basic%20d2ViOmFkbWlu

Начало ответа сервера меняется на такое

Request URL: http://192.168.1.32:9786/cameras/0/ptz/zoom/relative
Request Method: OPTIONS
Status Code: 401 Unauthorized
Remote Address: 192.168.1.32:9786
Referrer Policy: no-referrer-when-downgrade

После всё идентично, как и в случае с частью ?authorization=Basic%20d2ViOmFkbWlu

Есть ли пример, как с помощью fetch api корректно вызвать PUT метод? Был бы очень признателен


 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте !
Попробуйте  воспользоваться  переопределением метода - нужно изменить запрос с PUT на GET и добавить параметр "method=PUT", например:

GET http://192.168.1.32:9786/cameras/0/ptz/zoom/relative?method=PUT&authorization=Basic%20d2ViOmFkbWlu

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо, - но, не помогло.

Can’t access http://192.168.1.32:9786/cameras/0/ptz/zoom/relative?method=PUT&authorization=Basic%20d2ViOmFkbWlu response. Blocked by browser? TypeError:Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.

Get не может иметь Body. Как в этот запрос запихнуть ещё и json или xml данные для ptz?

Похоже, CORS разрешает только Get и Post. Либо сервер должен в заголовке возвращать как минимум 'Access-Control-Allow-Methods', 'GET,PUT,POST,OPTIONS');

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте.

А Вы не пробовали указать, что в запросе присутствует авторизация?

То есть указать:

credentials: 'include'

Хотя, по идее, если у Вас оба web-сервера на одной машине, то должно быть:

credentials: 'same-origin'

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте! Чего я только не пробовал уже.

Для подмены Put на Get это вообще не имеет смысла, т.к. тут ошибка в наличии Body, которого в Get быть не должно. А в случае чистого Put, ошибка в том, что браузер формирует зарос OPTION на который сервер отвечает, что он его не поддерживает (405). Формировал запрос OPTION и в ручную, с авторизацией - ответ аналогичный (405), без - ответ что она требуется (401).

credentials: 'include' подразумевает что в headers будет присутствовать 'Authorization': "Basic%20"... а сервер должен ответить Access-Control-Allow-Credentials (не отвечает). Да и вообще, такая авторизация не проходит, проходит только через URL.

Замкнутый круг получается - Put может и работает, но т.к. не работает Options, то не получается вызвать и Put.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Виталий, я в понедельник 3 августа,  накидаю пример на js, уже не помню, но что то было добавленно в сервер с версии 7.6 чтобы запросы из сторонних источников работали... В общем пока сделайте паузу, отвечу сюда

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 01.08.2020 в 20:29, ВиталийC сказал:

Спасибо! жду

Все подтвердилось и думаю будем костылить как и с запросами POST.

И так же не могу обещать что исправления будут в 7-ке. Мне нужно время чтобы все утвердить и сделать рабочий вариант.

Когда делали эту часть  API, браузеры еще не блокировали запросы. Приносим свои извинения! Буду держать в курсе по мере решения вопроса. 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти

  • Похожий контент

    • Автор: Кузнецов Алексей
      Взял поиграться дешёвую китайскую onvif ptz камеру. Ни разу не сталкивался хотел пощупать функционал. О реализации ptz и использования модифицированной кривой прошивки и uart порта наслышан. Не претензия, сам знал на что иду.
       
       
      Проблема в следующем, по порядку:
      1. Проблема и на 8 и на 8.1 альфа версии Линии
      2. Из Линии камера в ручном режиме двигается нормально, предсеты сохраняются но ни один из предсетов не работает, камера не реагирует.
      3. Из ONVIF Device Manager, данный функционал полностью работоспособный, предсеты создаются и камера по ним переходит.
       
      Технические характеристики:
      Модель XM530_R80X50-PQ_8M
      ONVIF 17.12
      Прошивка V5.00.R02.00030737.10010.349f17..ONVIF 16.12
        
      Может что то посоветуете?
    • Автор: SergeyB
      Добрый день,
      На камерах "рыбий глаз", в интерфейсе самой камеры есть несколько вариантов показа изображения Live View Mode, хотелось бы иметь возможность изменять просмотр (отображение вида) в "Наблюдательном посту", а так же в просмотре из архива.
      Конкретно интересуют камеры hikvision DS-2CD2942F и другие модели данного производителя с разверткой в 360
      Если я пропустил данный функционал, прошу направить меня в нужном направлении...
×