SID-запрос эхом ничего не возвращает - php - PullRequest
0 голосов
/ 28 мая 2019

Я использую маршрутизатор FritzBox (я не знаю, распространен ли он за пределами Германии - если нет, вот ссылка на мой конкретный маршрутизатор: https://avm.de/produkte/fritzbox/fritzbox-7590/), который имеет встроенную функцию SmartHome для собственной очереди, которая использует DECT.

Для интеграции и управления этими устройствами Smart Home (особенно Smart Plug) существует API (AHA-API). Через интернет-статью (источник: https://www.heise.de/select/ct/2016/7/1459414791794586) Я нашел скрипт, который помогает мне включать и выключать его, включая его в другой скрипт, который теперь работает благодаря ответам на предыдущее сообщение.

В статье говорится, что я должен установить php5 и два расширения mbstring и SimpleXML. Сценарий ниже должен найти SID моего маршрутизатора и использовать его для дальнейшего использования. Но каждый раз, когда я запускаю скрипт и хочу повторить SID, я ничего не получаю. Есть только пустая строка:

pi@raspberrypi:~/AVM $ sudo php SIDauslesen.php

pi@raspberrypi:~/AVM $ 

Если я включу этот скрипт в другой скрипт php, я получу ошибку. Кто-нибудь знает, почему он не отражает SID и как это исправить?

P.S. Вот мой код:

<?php
//Login
$username="username"; //username
$password="password"; //password
$loginurl="http://fritz.box/login_sid.lua"; //Host, change if needed

//Login-Function
function get_sid ($loginurl,$username,$password) {
  //Send initial Request to Fritzbox
  $http_response = @file_get_contents($loginurl);
  //Parse answer XML
  $xml = @simplexml_load_string($http_response);
  //check if there is an XMl object with Challange-tag
  if (!$xml || !$xml->Challenge ) {
    die ("Error: unexpected answer or communication error!\n");
  }
  //extract Challange and SID Tags of XML
  $challenge=(string)$xml->Challenge;
  $sid=(string)$xml->SID;
  if (preg_match("/^[0]+$/",$sid) && $challenge ) {
    $sid="";
    //create Password string
    $pass=$challenge."-".$password;
    //UTF-16LE encoding of Password was succesful
    $pass=mb_convert_encoding($pass, "UTF-16LE");
    //md5hash
    $md5 = md5($pass);
    //create Response String
    $challenge_response = $challenge."-".$md5;
    //send Response to Fritzbox
    $url=$loginurl."?username=".$username."&response=".$challenge_response;
    $http_response = file_get_contents($url);
    //parse Antwort XML
    $xml = simplexml_load_string($http_response);
    $sid=(string)$xml->SID;
    if ((strlen($sid)>0) && !preg_match("/^[0]+$/",$sid)) {
      //is not null, bingo!
      return $sid;
    }
  }else {
    //use exisiting SID if $sid is a hex string
    if ((strlen($sid)>0) && (preg_match("/^[0-9a-f]+$/",$sid))) return $sid;
  }
return null;
}
?>
...