向Panasonic IP cam发送“ GET”请求以控制PTZ移动-被CORS阻止

时间:2019-02-13 11:38:22

标签: java html http ip ip-camera

请原谅我的无知,我是Java,HTML和Web开发的新手。

我正在尝试构建一个Web应用程序来控制IP摄像机(Panasonic AW-HE50)的PTZ控件。我可以按照规格表通过浏览器发送基本命令: 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控制台显示为:

“ CORS策略已阻止从源“ http://172.16.14.90/cgi-bin/aw_ptz?cmd=%23T99&res=1”访问“ http://172.16.14.12”处的XMLHttpRequest:请求的资源上没有“ Access-Control-Allow-Origin”标头。

我对此进行了一些研究,但是解决方案似乎与服务器更为相关。据我所知,我不允许访问域,因为它是IP cam,而不是服务器。另外,我将我的HTML页面托管在同一个本地网络上,以解决此问题,但是它不起作用。令我惊讶的是它没有被识别为同一个域。我也不确定为什么浏览器能够发出此get请求,而Java脚本却不能。

在此先感谢您的帮助,再次对您的无知表示歉意。

安迪

1 个答案:

答案 0 :(得分:0)

这是一个典型的“同源政策”问题,有两种解决方法:

  • 安装IP摄像机并在其中托管HTML页面。
  • 将HTTP请求IP摄像机代码从网页移动到Java服务器,从而避免了同源策略限制。

通常,第二种方法更好,特别是当您可以将Java服务器与IP摄像机放置在同一局域网中时。以下是一些详细说明:

  1. 在Java服务器中托管HTML页面和JavaScript代码(我相信您已经做到了)。
  2. 当用户单击网页上的按钮时,将Ajax请求发送到Java服务器,而不是IP摄像机。因此,避免同源问题。
  3. 当Java服务器收到上述HTTP请求时,请解释用户操作并将相应的HTTP请求发送到IP摄像机。由于这是纯服务器端HTTP请求,因此不遵循同源策略。
  4. Java服务器收到来自IP摄像机的响应后,将该响应返回给浏览器。

顺便说一句,在上述情况下,Java服务器充当代理的角色。

对于您的一些问题:

“我对此进行了一些研究,但是解决方案似乎与服务器更相关。”

-是的,CORS策略是用于安全保护的浏览器功能。要解决此问题,您需要在服务器中执行某些操作。

“我将HTML页面托管在相同的本地网络上,以解决此问题,但是它无法正常工作。令我惊讶的是,该页面未被识别为同一域。”

-要使2个URL成为同一域(从CORS的角度来看),以下URL部分应相同:协议,主机名和端口。将2台计算机移到相同的本地网络不符合浏览器的同源策略。

“我也不确定为什么浏览器能够发出此get请求,而Java脚本却不能。”

-在浏览器的地址栏中键入IP摄像机URL并按回车键时,将向摄像机发送一个简单的常规HTTP GET请求,而不应用任何同源策略。但是,当您从JavaScript代码发送HTTP请求时,出于安全原因,浏览器将检查CORS设置。