Удаленное управление и Application.run_script

Все вопросы касающиеся использования
программы можно задать здесь
Ответить
Nikk
Сообщения: 4
Зарегистрирован: 18 апр 2016, 23:25

Удаленное управление и Application.run_script

Сообщение Nikk » 18 апр 2016, 23:45

Здравствуйте,
Есть два хумана, оба установлены на одной машине.
Задача из одного хумана запустить скрипт в другом.

Для реализации использую curl
Обычные команды, типа navigate исполняются отлично, но вот при Application.run_script происходит следующее - на управляющем хумане curl как бы "зависает" и чего-то ждет, а на управляемом хумане видно что скрипт запустился и опять же чего-то ждет. И ждать могут очень долго и не завершаются вообще.
Если остановить скрипт на управляемом хумане - то curl возвращает cURL Error: Recv failure: Connection was reset

В управляемом скрипте, для эксперимента, полезного кода вообще нет, только app->quit

строка вызова -
h--p://localhost:7100/Application.run_script?path=C%3A%5Cxweb35%5C7100%5CMy+Scripts%5CMyScript.php

Вопрос - что я делаю не так?

Хуман - 4.9.35
Win10 x64

Код на управляющем хумане:

Код: Выделить всё

<?php
$xhe_host = "127.0.0.1:7020";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");

$url = "http://localhost:7100/Application.run_script";
$params = array (
    'path' => 'C:\\xweb35\\7100\\My Scripts\\MyScript.php'
);
print_r(requester($url, $params, $requestType="get", $isJson=0, $fileName=""));

function requester($url, $params, $requestType="get", $isJson=0, $fileName="") { 
    $answer = array();
    $answer["answer"] = "";
    $answer["info"] = "";
    $answer["error"] = "";
    
    // Create a CURLFile object - procedural method
    //$cfile = curl_file_create('D:\\img\\down-bw\\7010-1.bmp','image/bmp','testpic'); // try adding 
    if (file_exists($fileName)) {
        $cfile = curl_file_create($fileName);
        $params = array (
            'file' => $cfile,
        );
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if ($requestType == "post"){ 
        curl_setopt($ch, CURLOPT_URL, $url);    
        curl_setopt($ch, CURLOPT_POST, 1);  
        curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest'));  
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);  
    } else { 
        $strParams = "";
        foreach ($params as $key=>$param) {
            $strParams .= $key."=".urlencode($param)."&";
        }
        $strParams = "?".$strParams;
        curl_setopt($ch, CURLOPT_URL, $url.$strParams);
        echo $url.$strParams."<br>";
    }

    $output = curl_exec($ch);
    if ($output !== false) {
        if ($isJson == 1) {
            $answer["answer"] = json_decode($output, true);
        } else {
            $answer["answer"] = $output;
        }    
        $answer["info"] = curl_getinfo($ch);
    } else {
        $answer["error"] = curl_error($ch);
        echo "cURL Error: " . curl_error($ch); 
    }
    curl_close($ch);
    return $answer;
}

// Quit
$app->quit();
?>
Код скрипта на управляемом

Код: Выделить всё

<?php

$xhe_host = "127.0.0.1:7100";

// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");

// Quit
$app->quit();
?>

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Удаленное управление и Application.run_script

Сообщение bigfozzy » 19 апр 2016, 10:46

Добрый день

На управляемом не надо запускать скрипт вообще, пусть стоит в режиме ожидания (просто запущенный) и слушает и выполняет команды.

Можно еще открыть информационную панель и посмотреть какие команды приходят на вход управляемого хумана.

PS: Код отсылки команды в хуман

Код: Выделить всё

	// call a command on the server
	function call($command,$timeout=-1)
	{
		// время обработки комманд
		if ($timeout==-1)
			$timeout=XHEBaseObject::$COMMAND_TIME;

		// call server and return its answer
		$url = "http://".$this->server."/".$command;
		if(strlen($this->password))
		{
			if(strstr($url,"&")!=false || strstr($url,"?")!=false)
				$url .= "&password=".$this->password;
			else
				$url .= "?password=".$this->password;
		}
		$postvars="";
		if(strstr($url,"?"))
      		{
         		$indexPost=strpos($url,"?",0);
			$postvars=substr($url,$indexPost+1,strlen($url)-$indexPost);
			$url=substr($url,0,$indexPost);
	   	}
      		$postvars=$postvars."  ";

      		for ($i=0;$i<XHEBaseObject::$COMMAND_TRY_COUNT;$i++)
		{
	      		$cUrl = curl_init();
      			curl_setopt($cUrl, CURLOPT_URL, $url);
      			curl_setopt($cUrl, CURLOPT_POST, 1);      
	      		curl_setopt($cUrl, CURLOPT_POSTFIELDS, $postvars);
      			curl_setopt($cUrl, CURLOPT_RETURNTRANSFER, 1);
      			curl_setopt($cUrl, CURLOPT_TIMEOUT, $timeout);
			$html=curl_exec($cUrl);
      			curl_close($cUrl);
			if ($html===false)
				continue;
			else
				break;
		}
			
		// close php if not connect to XHE
		global $bClosePHPIfNotConnected;
		global $bWarningPHPIfNotConnected;
		if ($bClosePHPIfNotConnected===true && $html===false)
		{
  			echo("\nКомманда $url?$postvars не выполнена.Нет соединения с хуман эмулятором, проверьте совпадение портов и их доступность а также что програма запущена и не зависла.\n");			
			die("XWeb@exit");
		}
                if ($bWarningPHPIfNotConnected===true && $html===false)
  			echo("Connect from PHP to XHE not found. Check XHE and PHP port and connection to xhe.\nCommand $url?$postvars not runned.\n");
    		
	        $html = trim($html);
		return $html;
	}

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Удаленное управление и Application.run_script

Сообщение bigfozzy » 19 апр 2016, 10:55

Сейчас еще проверю ситуацию вживую

Nikk
Сообщения: 4
Зарегистрирован: 18 апр 2016, 23:25

Re: Удаленное управление и Application.run_script

Сообщение Nikk » 19 апр 2016, 11:17

bigfozzy писал(а): На управляемом не надо запускать скрипт вообще, пусть стоит в режиме ожидания (просто запущенный) и слушает и выполняет команды.
Так в этом то и проблема - нужно именно запустить скрипт, а не отдельные простые команды.
bigfozzy писал(а):Можно еще открыть информационную панель и посмотреть какие команды приходят на вход управляемого хумана.
В инфопанели все хорошо, команда принята, скрипт запущен :(

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Удаленное управление и Application.run_script

Сообщение bigfozzy » 19 апр 2016, 11:21

Извиняюсь, вот так должен выглядеть запускаемый скрипт в этом случае :

Код: Выделить всё


<?php

// указать что выполнение идет вне оболочки
$PHP_Use_Trought_Shell=false; 

$xhe_host = "127.0.0.1:7100";

// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");

// Quit
$app->quit();
?>

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Удаленное управление и Application.run_script

Сообщение bigfozzy » 19 апр 2016, 11:30

В следующей версии эту переменную можно будет не указывать.

Nikk
Сообщения: 4
Зарегистрирован: 18 апр 2016, 23:25

Re: Удаленное управление и Application.run_script

Сообщение Nikk » 19 апр 2016, 11:37

Да, вот так работает, спасибо.

А сделать так, чтобы в управляющий скрипт в cURL возвращался какой-нибудь ответ из запускаемого скрипта - так наверное не возможно?
И cURL возвращает ошибку Recv failure: Connection was reset
Можно ли как то понять - принята ли команда и запустился ли скрипт?

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Удаленное управление и Application.run_script

Сообщение bigfozzy » 19 апр 2016, 11:39

будет возвращать в 4.9.36

Nikk
Сообщения: 4
Зарегистрирован: 18 апр 2016, 23:25

Re: Удаленное управление и Application.run_script

Сообщение Nikk » 19 апр 2016, 12:02

Спасибо за помощь, буду ждать

Ответить