2015-07-09 2 views
0

У меня есть класс RPC-сервера, который принимает данные JSON от неуказанного данного участника, используя cURL.получить данные JSON из объекта RPC php5.5

Я вижу, как данные попадают в мой класс, я могу хранить var_dump в качестве запроса на сервер, но вывод выглядит как получение информации веб-сервера со ссылками на входящий объект. Но я не вижу мои JSON данные, 'Foo: бар'

<?php 
class jsonRPCServer { 
     public static function handle($object) { 
       if (
         $_SERVER['REQUEST_METHOD'] != 'POST' || 
         empty($_SERVER['CONTENT_TYPE']) || 
         $_SERVER['CONTENT_TYPE'] != 'application/json' 
         ) { 
         return false; 
       } 
       $request = json_decode(file_get_contents('php://input'),true); 
       $args=func_get_args(); 
       ob_start(); 
       var_dump($_SERVER); 
       $result2 = ob_get_clean(); 
       $file = 'stripedump.txt'; 
       $current = file_get_contents($file); 
       $current .= $result2; 
       file_put_contents($file, $current); 
       try { 
         if ($result = @call_user_func_array(array($object,$request['method']),$request['params'])) { 
           $response = array (
                     'id' => $request['id'], 
                     'result' => $result, 
                     'error' => NULL 
                     ); 
         } else { 
           $response = array (
                     'id' => $request['id'], 
                     'result' => NULL, 
                     'error' => 'unknown method or incorrect parameters' 
                     ); 
         } 
       } catch (Exception $e) { 
         $response = array (
                   'id' => $request['id'], 
                   'result' => NULL, 
                   'error' => $e->getMessage() 
                   ); 
       } 
       if (!empty($request['id'])) { // notifications don't want response 
         header('content-type: text/javascript'); 
         echo json_encode($response); 
       } 
       return true; 
     } 
} 
?> 


<?php 
require_once 'example.php'; 
require_once 'jsonRPCServer.php'; 
$myExample = new example(); 
jsonRPCServer::handle($myExample) 
    or print 'no request'; 
echo '<b>Attempt to perform basic operations</b><br />'."\n"; 
try { 
    echo 'Your name is <i>'.$myExample->giveMeSomeData('name').'</i><br />'."\n"; 
    $myExample->changeYourState('I am using this funnction from the local environement'); 
    echo 'Your status request has been accepted<br />'."\n"; 
} catch (Exception $e) { 
    echo nl2br($e->getMessage()).'<br />'."\n"; 
} 
var_dump($myExample); 
echo '<br /><b>Attempt to store strategic data</b><br />'."\n"; 
try { 
    $myExample->writeSomething('bite me'); 
    echo 'Strategic data succefully stored'; 
} catch (Exception $e) { 
    echo nl2br($e->getMessage()); 
} 
?> 

выход из удаленного Curl клиента:

gentoo-mini htdocs # curl -X POST -H "Content-Type: application/json" -d "{foo:bar}" http://nyctelecomm.com/hooker/ 
<b>Attempt to perform basic operations</b><br /> 
Your name is <i>Bubba</i><br /> 
Your status request has been accepted<br /> 
object(example)#1 (1) { 
    ["someData":"example":private]=> 
    array(2) { 
    ["name"]=> 
    string(5) "Bubba" 
    ["attr"]=> 
    string(17) "Some me Attribute" 
    } 
} 
<br /><b>Attempt to store strategic data</b><br /> 
Strategic data succefully stored 

хранится var_dump ($ _ SERVER) данные:

array(29) { 
    ["HTTP_HOST"]=> 
    string(15) "nyccomm.com" 
    ["HTTP_USER_AGENT"]=> 
    string(11) "curl/7.42.1" 
    ["HTTP_ACCEPT"]=> 
    string(3) "*/*" 
    ["CONTENT_TYPE"]=> 
    string(16) "application/json" 
    ["CONTENT_LENGTH"]=> 
    string(1) "9" 
    ["PATH"]=> 
    string(29) "/sbin:/bin:/usr/sbin:/usr/bin" 
    ["LD_LIBRARY_PATH"]=> 
    string(29) "/usr/local/lib:/usr/local/lib" 
    ["SERVER_SIGNATURE"]=> 
    string(0) "" 
    ["SERVER_SOFTWARE"]=> 
    string(34) "Apache/2.4.12 (FreeBSD) PHP/5.6.10" 
    ["SERVER_NAME"]=> 
    string(15) "nyccomm.com" 
    ["SERVER_ADDR"]=> 
    string(13) "108.61.175.20" 
    ["SERVER_PORT"]=> 
    string(2) "80" 
    ["REMOTE_ADDR"]=> 
    string(12) "67.82.49.236" 
    ["DOCUMENT_ROOT"]=> 
    string(21) "/home/www" 
    ["REQUEST_SCHEME"]=> 
    string(4) "http" 
    ["CONTEXT_PREFIX"]=> 
    string(0) "" 
    ["CONTEXT_DOCUMENT_ROOT"]=> 
    string(21) "/home/www" 
    ["SERVER_ADMIN"]=> 
    string(19) "[email protected]" 
    ["SCRIPT_FILENAME"]=> 
    string(38) "/home/www/hooker/index.php" 
    ["REMOTE_PORT"]=> 
    string(5) "52841" 
    ["GATEWAY_INTERFACE"]=> 
    string(7) "CGI/1.1" 
    ["SERVER_PROTOCOL"]=> 
    string(8) "HTTP/1.1" 
    ["REQUEST_METHOD"]=> 
    string(4) "POST" 
    ["QUERY_STRING"]=> 
    string(0) "" 
    ["REQUEST_URI"]=> 
    string(8) "/hooker/" 
    ["SCRIPT_NAME"]=> 
    string(17) "/hooker/index.php" 
    ["PHP_SELF"]=> 
    string(17) "/hooker/index.php" 
    ["REQUEST_TIME_FLOAT"]=> 
    float(1436429001.683) 
    ["REQUEST_TIME"]=> 
    int(1436429001) 
} 
string(4) "name" 

TCPDUMP :

00:29:06.659025 IP 192.168.0.55.52841 > 108.61.175.20.vultr.com.http: Flags [P.], seq 1:148, ack 1, win 115, options [nop,nop,TS val 2017270703 ecr 2483478707], length 147 
[email protected]@.f....7l=...i.P...g.I.]...s....... 
x=......POST /hooker/ HTTP/1.1 
Host: nyccomm.com 
User-Agent: curl/7.42.1 
Accept: */* 
Content-Type: application/json 
Content-Length: 9 

{foo:bar} 
00:29:06.746198 IP 108.61.175.20.vultr.com.http > 192.168.0.55.52841: Flags [P.], seq 1:561, ack 148, win 1033, options [nop,nop,TS val 2483478793 ecr 2017270703], length 560 
[email protected]=.....7.P.i.I.].......  :...... 
...  x=..HTTP/1.1 200 OK 
Date: Thu, 09 Jul 2015 08:03:21 GMT 
Server: Apache/2.4.12 (FreeBSD) PHP/5.6.10 
X-Powered-By: PHP/5.6.10 
Content-Length: 373 
Content-Type: text/html; charset=UTF-8 

<b>Attempt to perform basic operations</b><br /> 
Your name is <i>Bubba</i><br /> 
Your status request has been accepted<br /> 
object(example)#1 (1) { 
    ["someData":"example":private]=> 
    array(2) { 
    ["name"]=> 
    string(5) "Bubba" 
    ["attr"]=> 
    string(17) "Some me Attribute" 
    } 
} 
<br /><b>Attempt to store strategic data</b><br /> 
Strategic data succefully stored 
00:29:06.746271 IP 192.168.0.55.52841 > 108.61.175.20.vultr.com.http: Flags [.], ack 561, win 123, options [nop,nop,TS val 2017270790 ecr 2483478793], length 0 
[email protected]@.gP...7l=...i.P.....I.....{.W..... 

Как получить доступ к данным JSON из моего входящего объекта RPC? (В частности, 'Foo: бар')

ответ

0

Это работает, когда используются все его самости

<?php 
     $request = file_get_contents('php://input'); 
     $args=func_get_args(); 
     ob_start(); 
     var_dump($request); 
     $result2 = ob_get_clean(); 
     $file = 'stripedump.txt'; 
     $current = file_get_contents($file); 
     $current .= $result2; 
     file_put_contents($file, $current); 
?> 
Смежные вопросы