2017-11-24 11 views
0

필자는 HbbTV 응용 프로그램에서 필립스 색조 표시등 (정확하게 게이트웨이 하드웨어와 함께)과 통신하기 위해 브리지와 같은 솔루션을 사용하고 있습니다.XHR POST to Philips Hue Bridge

프로세스가 진행 중이고 시스템이 작동 중이기 때문에 지금은 HbbTV가있는 TV를 시뮬레이트하는 Firefox 용 플러그인을 사용하고 있습니다. 그렇게하기 위해, 나는 XAMPP를 통해 아파치를 시작한다.이 파일에는 Firefox에로드되는 파일이있다.

필자는 필자가 필자가 필자의 게이트웨이에 POST 요청을 보낼 수 없기 때문에 정확한 출처 정책이 맞는지 확인했습니다. 필립스 색조의 설정에 액세스 할 수 없기 때문에 내 작업 영역은 클라이언트 측에서만 이루어져야합니다.

내 실제 시도는 다음과 같습니다

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

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

나는 자바 스크립트와 웹의 개발에 아주 새로운 해요. 누군가가 조언과 어쩌면 명확한 예를 들어 올바른 길로 나를 인도 할 수 있기를 바랍니다.

안부 아드리안는 P-의 XAMPP에서의

답변

0

하나는 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 웹 요청을 발행하기위한 유틸리티입니다 (당신은 그것을 찾을 수 있습니다 귀하의 XAMPP 폴더에 xampp\apache\curl.exe), 그것은 PHP에 대한 바인딩이 있습니다. https://curl.haxx.se/. 기본적으로 JSON은 컨트 롤러가 제공하는 것을 반환하므로 JSON은 패스 스루해야합니다. 콘텐츠 유형이 문제가 될 수도 있고 아닐 수도 있습니다. 작동하지 않으면 curl_exec 줄 바로 앞에 header("Content-Type: application/json");을 넣으십시오.

+0

잠시만 실례지만 휴가 중이었습니다. 좋아, 그래서 요청을 보낼 전자 php 파일을 만들지 만 html 파일에 어떻게 포함시켜야합니까? – DaPole

+0

@DaPole 웹 서버가있어 여러 파일을 완벽하게 호스팅 할 수 있습니다. 보시다시피,'''stringState'' 변수를 수정했습니다. 즉,''xy.php'' 파일이 원본 파일에서 참조되는 곳입니다. 그러나 원래는 요청 변수를 오보 (mispaired) 했으므로 이제는 올바른 것입니다. – tevemadar

+0

예, 분명합니다. 그것이 올바른 것으로 이해함에 따라 예를 들어 .php를 시작해야합니다. StringState 구성으로 인해 AJAX 명령과 변수 ip, user 및 light가 이미로드되어 있어야합니까? 매개 변수가 필요하지 않습니까? 결국 PHP에서 응답을 수집하고이를 JSON으로 구문 분석합니다. PHP를 추가하지 않고 Javascript와 동일한 출처 정책에 대한 대안을 제공하는 또 다른 옵션이 있습니까? HbbTV는 매우 제한된 자유를 사용할 수 있습니다. – DaPole