how do I access JSON RPC object data?

I have a RPC server class that accepts JSON data from an unspecified given 3rd party using cURL.

I can see the data hit my class, I can store a var_dump into a for what appears to be the server request, but the output looks like receiving webserver info with references to the inbound object.
But I do not see my JSON data ‘foo:bar’

<?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()); } ?>

output from remote cURL client:

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

stored var_dump($_SERVER) data:

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:

[code]
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
E…A@[email protected]…7l=…i.P…g.I.]…s…
x=…POST /hooker/ HTTP/1.1
Host: nyctelecomm.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
E…[email protected]…l=…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

Attempt to perform basic operations

Your name is Bubba

Your status request has been accepted

object(example)#1 (1) {
[“someData”:“example”:private]=>
array(2) {
[“name”]=>
string(5) “Bubba”
[“attr”]=>
string(17) “Some me Attribute”
}
}

Attempt to store strategic data

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
E…4.B@[email protected]…7l=…i.P…I…{.W…[/code]

How do I access the JSON data from my inbound RPC object? (specifically ‘foo:bar’)

Tunage, You posted this on StackOverflow, too, right? I see you got an answer there.
Did it solve it for you?
The link was: http://stackoverflow.com/questions/31311606/get-json-data-from-rpc-object-php5-5

I see on PHP-Builder site, you also posted there with a lot of info posted back to you. Did it solve it for you:
That link was; http://board.phpbuilder.com/showthread.php?10393835-cannot-access-rpc-obect-from-remote-client&p=11049123 This one explained a lot of improvements for your code.

Are both your server and your client owned by you? I mean, is the 3rd party data sent to you data that you
created? If so, you can use a JSON-RPC library that is designed just for what you are asking. If you are
really talking about “scraping” data from someone else’s sight, it can be very tricky to do so. There are several lirbraries available that let you pass the RPC object.

In your code, you are attempting to look at the server’s info, not the foo:bar section. Perhaps I do not understand what data you are attempting to pull out of this 3rd party server. If the 3rd party server is
set up for RPC version 2.0, here is a class that might work at the decoding end of it. Not sure…
https://ptrofimov.wordpress.com/2011/04/27/php-class-to-implement-json-rpc-2-0-protocol/

So, if you just want the foo:bar section, just remove the first part and then us XML to grab the rest?
Perhaps I am confused what you really want to do. I mean dumping the $_SERVER array doesn’t do any
good for you. It is not the Json data you want. You showed the data you want is in the Curl’d data, just
grap it out.

Please give us further insight into what you really are attempting to do…

Sponsor our Newsletter | Privacy Policy | Terms of Service