XHR发布飞利浦Hue Bridge

时间:2017-11-24 19:13:01

标签: javascript cors same-origin-policy

我正在研究类似桥接的解决方案,以便从HbbTV应用程序与一些飞利浦Hue灯(正确使用网关硬件)进行通信。

随着流程向前发展并且系统正在运行,我现在正在使用Firefox插件来模拟带有HbbTV的电视。为此,我通过XAMPP启动了一个apache,在此我将我的文件加载到Firefox中。

由于我这样做了,我无法向飞利浦网关发送任何POST请求,因为相同的原始政策是正确的。我无法访问飞利浦Hue的设置,因此我的工作范围必须仅来自客户端。

我的实际尝试看起来像这样:



		var stringState = "http://" + this.Ip + "/api/" + this.UserId + "/lights/" + this.LightId;
		var httpxml = new XMLHttpRequest();
		
		var valueRequest;
	
		console.log("in GetState:" + this.LightId);
	
			
		httpxml.onreadystatechange = function() {
			if (httpxml.readyState  == XMLHttpRequest.DONE) {
				
				valueRequest = JSON.parse(httpxml.responseText);
				
				console.log(valueRequest);
				console.log(valueRequest.state.on);
					
				that.switchState(valueRequest.state.on);
			}
		}
		
		httpxml.open('GET',stringState,true);

		httpxml.withCredentials = true;
		httpxml.setRequestHeader("Content-Type", "application/json");
		
		httpxml.send();




我在JavaScript和Web开发方面很陌生。我希望有人可以带领我走上正确的道路,提出一些建议,也许是一个明确的例子。

祝你好运 阿德里安

1 个答案:

答案 0 :(得分:0)

XAMPP中的一个P-s用于PHP。因此,您可以执行的解决方法是在HTML旁边托管一个PHP页面(并且CORS不会出现任何问题),并让它完成这项工作。

这样的东西
<?php
  $ip=$_REQUEST['ip'];
  $user=$_REQUEST['user'];
  $light=$_REQUEST['light'];

  $ch=curl_init("http://".$ip."/api/".$user."/lights/".$light);
  curl_exec($ch);
  curl_close($ch);

这远非安全和美好,但可能有助于开始。一些简单的线索:变量以$开头,.是字符串连接的运算符。 $_REQUEST是一个数组,它获取url参数,你应该在修改后的请求中提供什么(其中xy.php是PHP页面的文件名):

var stringState = "xy.php?ip=" + this.Ip + "&user=" + this.UserId + "&light=" + this.LightId;

curl是一个用于发出Web请求的实用程序(您可以在XAMPP文件夹xampp\apache\curl.exe中找到它),并且它具有PHP绑定。 https://curl.haxx.se/。默认情况下,它返回控制器提供的任何内容,因此JSON应该传递。内容类型可能是也可能不是问题,如果它不起作用,您可以尝试在header("Content-Type: application/json");行之前放置curl_exec