За последние 24 часа нас посетили 17980 программистов и 1681 робот. Сейчас ищут 1136 программистов ...

(UPDx2) XML-RPC

Тема в разделе "PHP для новичков", создана пользователем OL, 19 окт 2008.

  1. OL

    OL Активный пользователь

    С нами с:
    30 июн 2008
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    из центру
    клиент:

    PHP:
    1.  
    2. function do_call($host, $port, $path, $request)
    3. {
    4.     $sock = fsockopen($host, $port, $errno, $errstr, 30);
    5.     if (!$sock) die("$errstr ($errno)\r\n");
    6.     fwrite($sock, "POST $path HTTP/1.0\r\n");
    7.     fwrite($sock, "User-Agent: PHPRPC/1.0\r\n");
    8.     fwrite($sock, "Host: $host\r\n");
    9.     fwrite($sock, "Content-type: text/xml\r\n");
    10.     fwrite($sock, "Content-length: " . strlen($request) . "\r\n");
    11.     fwrite($sock, "Accept: */*\r\n");
    12.     fwrite($sock, "\r\n");
    13.     fwrite($sock, "$request\r\n");
    14.     fwrite($sock, "\r\n");
    15.     $headers = "";
    16.     while ($str = trim(fgets($sock, 4096))) {
    17.         $headers .= "$str\r\n";
    18.     }
    19.     $data = "";
    20.     while (!feof($sock)) {
    21.         $data .= fgets($sock, 4096);
    22.     }
    23.     fclose($sock);
    24.     return $data;
    25. }
    26. $arMessage = array();
    27. function make_request($request, &$arMessage, $tel, $msg, $method)
    28. {
    29.     global $host, $port, $path;
    30.    
    31.     $retval = do_call($host, $port, $path, $request);
    32.     $data = xmlrpc_decode($retval, 'utf-8');
    33.     if (is_array($data) && xmlrpc_is_fault($data))
    34.     {
    35.     $arMessage[] = "Unable";
    36.     $arMessage[] = "Error Code: ".$data['faultCode'];
    37.     $arMessage[] = "Error Message: ".$data['faultString'];
    38.     } else {
    39.     $arMessage[] = $data;
    40.     }
    41. }
    42.  
    43. $request = xmlrpc_encode_request('getQuery', array($tel, $msg));
    44. make_request($request, $arMessage, $tel, $msg, "getQuery");
    45. $arMessage[] = "";
    46.  
    47.  
    48. foreach ($arMessage AS $message) {
    49. print $message."\r\n";
    50. print_r($arMessage);
    51. }
    52.  
    сервер такой:

    PHP:
    1.  
    2. class getQuery
    3. {
    4.     function getQuery($method, $params)
    5.     {
    6.       // код
    7.      $result = "test";
    8.      return $result;
    9.     }
    10. }
    11.   xmlrpc_server_register_method($server, "getQuery", "getQuery");
    12.  
    13.   if (!isset($HTTP_RAW_POST_DATA)){
    14.     $HTTP_RAW_POST_DATA = file_get_contents('php://input');
    15. }
    16.  
    17.   $request = $HTTP_RAW_POST_DATA;
    18.  
    19.  
    20.   $resp = xmlrpc_server_call_method($server, $request, array());
    21.   header('Content-Type: text/xml');
    22.   print $resp;
    23.  
    24.  
    вывод: Array ( [0] => [1] => ) Array ( [0] => [1] => )
    кто-нить может посоветовать, в какую сторону копать?
     
  2. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    в сторону юга. в чём вопрос?
     
  3. OL

    OL Активный пользователь

    С нами с:
    30 июн 2008
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    из центру
    Подумалось вдруг, что кто из джедаев подскажет, с чего массив $data может быть пустым. не вижу я, чего неправильно делаю. где ошибка - в клиенте или сервере?