Отправка запросов «GET» на IP-камеру Panasonic для управления движением PTZ - заблокировано CORS - PullRequest
0 голосов
/ 13 февраля 2019

Пожалуйста, прости мое невежество, я новичок в Java, HTML и веб-разработки.

Я пытаюсь создать веб-приложение для управления PTZ-управлением IP-камеры (Panasonic AW-HE50).Я могу посылать ему основные команды через браузер согласно спецификации: https://eww.pass.panasonic.co.jp/pro-av/support/content/guide/DEF/HE50_120_IP/HDIntegratedCamera_InterfaceSpecifications-V1.05E.pdf

Например, я могу заставить его вращаться, набрав http://172.16.14.90/cgi-bin/aw_ptz?cmd=%23P99&res=1 в браузере.

Теперь я просто пытаюсь перевести это на Java, чтобы при нажатии кнопки на веб-странице выполнялся запрос «GET» для перемещения камеры в определенном направлении.

Мой код на данный момент выглядит так:

$(document).ready(function(){
  $("button").click(function(){
    $.get(camURL + "T99&res=1", function(data, status){
      alert("Data: " + data + "\nStatus: " + status);
    });
  });
});

Однако сообщение не доходит до камеры, и консоль Chrome гласит:

"Доступ к XMLHttpRequest в 'http://172.16.14.90/cgi-bin/aw_ptz?cmd=%23T99&res=1' от источника 'http://172.16.14.12' заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок' Access-Control-Allow-Origin '. "

Я сделал несколькоисследовать это, но решения, кажется, более актуальны для серверов.Насколько я знаю, я не могу разрешить доступ к домену, так как это IP-камера, а не сервер.Кроме того, я разместил свою HTML-страницу в той же локальной сети, чтобы обойти это, но это не сработало.Я удивлен, что он не распознается как тот же домен.Я также не уверен, почему браузер может сделать этот запрос на получение, но Java-сценарий - нет.

Заранее благодарен за помощь и еще раз извиняюсь за мое невежество.

Энди

1 Ответ

0 голосов
/ 19 февраля 2019

Это типичная проблема, связанная с политикой того же происхождения, и ее можно исправить двумя способами:

  • Взлом IP-камеры и размещение там HTML-страниц.
  • Перемещениекод HTTP-запроса к IP-камере с веб-страницы на Java-сервер и, таким образом, избегает ограничения политики одного и того же источника.

Обычно 2-й способ лучше, особенно когда вы можетепоставить Java-сервер в одной локальной сети с IP-камерой.Вот несколько подробных описаний:

  1. Размещение HTML-страницы и кода JavaScript на сервере Java (я полагаю, вы уже сделали это).
  2. Когда пользователь нажмет кнопку на веб-странице, отправьтеЗапрос Ajax к серверу Java, а не к IP-камере.Таким образом, избегайте проблемы с тем же источником.
  3. Когда Java-сервер получает указанный выше HTTP-запрос, интерпретирует пользовательскую операцию и отправляет соответствующий HTTP-запрос на IP-камеру.Поскольку это чистый HTTP-запрос на стороне сервера, он не следует политике одного и того же источника.
  4. После того, как сервер Java получит ответ от IP-камеры, верните этот ответ браузеру.

Кстати, в приведенном выше сценарии сервер Java берет на себя роль прокси.

Для некоторых ваших вопросов:

"Я провел некоторые исследования этого, но решенияпохоже, больше подходит для серверов. "

- Да, политика CORS - это функция браузера для защиты.Чтобы решить эту проблему, вам нужно что-то сделать на сервере.

"Я разместил свою HTML-страницу в той же локальной сети, чтобы обойти это, но это не сработало. Я удивлен, что этоне распознается как один и тот же домен. "

- чтобы сделать 2 URL-адреса одним доменом (с точки зрения CORS), следующая часть URL-адреса должна быть идентичной: протокол, имя хоста и порт.Перемещение 2 машин в одну и ту же локальную сеть не удовлетворяет политике одного и того же источника для браузера.

"Я также не уверен, почему браузер может сделать этот запрос на получение, но сценарий Java не. "

- Когда вы вводите URL-адрес IP-камеры в адресную строку браузера и нажимаете return, на камеру отправляется простой обычный запрос HTTP GET, политика того же источника не применяется.Однако при отправке HTTP-запроса из кода JavaScript браузер проверяет настройки CORS по соображениям безопасности.

...