Prev: session data
Next: Preg Match Problem
From: "Daevid Vincent" on 1 Jun 2010 20:41 > -----Original Message----- > From: Daevid Vincent [mailto:daevid(a)daevid.com] > Sent: Thursday, May 27, 2010 4:48 PM > To: 'php-general(a)lists.php.net' > Subject: JSON RPC with SSL and .pem certificates? > > Anyone have a good example or routine or library or something > that will use JSON-RPC client and SSL .pem certs? All the > code I've found out there is pretty dated or unkept or lacks > one or more of those requirements. > > http://jsonrpcphp.org/ is about as close as I could find, but > it doesn't use SSL and hasn't been touched since 2007. Well, I just hacked together some cURL and this is working pretty good for our needs. Maybe it will help someone else. YMMV. #!/usr/bin/php -q <?php error_reporting(E_ALL & ~E_NOTICE); ########################################################### ############## USER DEFINED PARAMETERS #################### ########################################################### define('JSONRPC_SERVER', "https://IP_ADDRESS:PORT"); ########################################################### ########################################################### ########################################################### $OPTION['debug'] = false; //loop through our arguments and see what the user selected for ($i = 1; $i < $_SERVER["argc"]; $i++) { switch($_SERVER["argv"][$i]) { case "-v": case "--version": echo $_SERVER['argv'][0]." v2010-05-28 02:15 PM\n"; exit; break; case "--debug": $OPTION['debug'] = true; break; case "-?": case "-h": case "--help": ?> Usage: <?php echo $_SERVER['argv'][0]; ?> <option> --help, -help, -h, or -? options, to get this help. --version to return the version of this file. --debug to turn on output debugging. <?php exit; break; } } //parse arguments $params = array('foo'=>"bar",'myid'=>"69"); $result = cURL_POST_JSON('some_method', $params); var_dump($result); exit("\n"); ########################################################################### ########################################### ######## F U N C T I O N S ########################################################################### ############### ########################################################################### ########################################### /** * Send a POST JSON-RPC method posting to a URL using cURL libraries. * * @param string $method the remote method to call * @param string $parameters the data to send in "?key=value&" format * @access public * @return array or false * @date 2010-05-27 */ function cURL_POST_JSON($method, $parameters) { global $OPTION; $url = JSONRPC_SERVER; if ($OPTION['debug']) echo "\nURL = ".$url."\n"; if ($OPTION['debug']) echo "\nmethod = ".$method."\n"; if ($OPTION['debug']) { echo "\nparameters = \n"; var_dump($parameters); } $request = array( 'method' => $method, 'params' => $parameters, 'id' => md5(date('c')) ); $request = json_encode($request); if ($OPTION['debug']) echo "\nrequest = ".$request."\n"; $PASS = false; // create a new curl resource $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSLCERT, './YOUR_Certificate.pem'); curl_setopt($ch, CURLOPT_SSLCERTTYPE, "PEM"); curl_setopt($ch, CURLOPT_SSLKEY, './YOUR_Private.pem'); curl_setopt($ch, CURLOPT_SSLKEYTYPE, "PEM"); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); //VERIFYPEER is false because otherwise we get this: //cURL error: SSL certificate problem, verify that the CA cert is OK. Details: //error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $request); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json')); curl_setopt($ch, CURLOPT_HEADER, false); //FALSE to exclude the header from the output (otherwise it screws up json_decode) curl_setopt($ch, CURLOPT_NOBODY, false); //FALSE because we want the body too curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // get the response as a string from curl_exec(), rather than echoing it curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); // don't use a cached version of the url //curl_setopt($ch, CURLOPT_TIMEOUT, 4); $returnData = curl_exec($ch); if (curl_errno($ch)) print "\n\ncURL error: ".curl_error($ch)."\n\n"; $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ( $httpcode == "200" ) { $PASS = true; } if ($OPTION['debug']) echo "\nDART API JSON-RPC POST method ".( ($PASS) ? "SUCCESSFULL" : "FAILED" ).".\n\n"; if ($PASS) return json_decode($returnData,true); //return $returnData; else exit(); } ?>
From: Adam Richardson on 1 Jun 2010 20:49 On Tue, Jun 1, 2010 at 8:41 PM, Daevid Vincent <daevid(a)daevid.com> wrote: > > -----Original Message----- > > From: Daevid Vincent [mailto:daevid(a)daevid.com] > > Sent: Thursday, May 27, 2010 4:48 PM > > To: 'php-general(a)lists.php.net' > > Subject: JSON RPC with SSL and .pem certificates? > > > > Anyone have a good example or routine or library or something > > that will use JSON-RPC client and SSL .pem certs? All the > > code I've found out there is pretty dated or unkept or lacks > > one or more of those requirements. > > > > http://jsonrpcphp.org/ is about as close as I could find, but > > it doesn't use SSL and hasn't been touched since 2007. > > Well, I just hacked together some cURL and this is working pretty good for > our needs. Maybe it will help someone else. YMMV. > > #!/usr/bin/php -q > <?php > error_reporting(E_ALL & ~E_NOTICE); > > ########################################################### > ############## USER DEFINED PARAMETERS #################### > ########################################################### > define('JSONRPC_SERVER', "https://IP_ADDRESS:PORT"); > ########################################################### > ########################################################### > ########################################################### > > $OPTION['debug'] = false; > > //loop through our arguments and see what the user selected > for ($i = 1; $i < $_SERVER["argc"]; $i++) > { > switch($_SERVER["argv"][$i]) > { > case "-v": > case "--version": > echo $_SERVER['argv'][0]." v2010-05-28 > 02:15 PM\n"; > exit; > break; > > case "--debug": > $OPTION['debug'] = true; > break; > > case "-?": > case "-h": > case "--help": > ?> > Usage: <?php echo $_SERVER['argv'][0]; ?> <option> > > --help, -help, -h, or -? options, to get this help. > --version to return the version of this file. > --debug to turn on output debugging. > <?php > exit; > break; > } > } //parse arguments > > $params = array('foo'=>"bar",'myid'=>"69"); > $result = cURL_POST_JSON('some_method', $params); > var_dump($result); > > exit("\n"); > > ########################################################################### > ########################################### > ######## F U N C T I O N S > ########################################################################### > ############### > ########################################################################### > ########################################### > > /** > * Send a POST JSON-RPC method posting to a URL using cURL libraries. > * > * @param string $method the remote method to call > * @param string $parameters the data to send in "?key=value&" format > * @access public > * @return array or false > * @date 2010-05-27 > */ > function cURL_POST_JSON($method, $parameters) > { > global $OPTION; > > $url = JSONRPC_SERVER; > > if ($OPTION['debug']) echo "\nURL = ".$url."\n"; > if ($OPTION['debug']) echo "\nmethod = ".$method."\n"; > if ($OPTION['debug']) { echo "\nparameters = \n"; > var_dump($parameters); } > > $request = array( > 'method' => $method, > 'params' => $parameters, > 'id' => md5(date('c')) > ); > $request = json_encode($request); > if ($OPTION['debug']) echo "\nrequest = ".$request."\n"; > > $PASS = false; > // create a new curl resource > $ch = curl_init(); > curl_setopt($ch, CURLOPT_URL, $url); > > curl_setopt($ch, CURLOPT_SSLCERT, './YOUR_Certificate.pem'); > curl_setopt($ch, CURLOPT_SSLCERTTYPE, "PEM"); > curl_setopt($ch, CURLOPT_SSLKEY, './YOUR_Private.pem'); > curl_setopt($ch, CURLOPT_SSLKEYTYPE, "PEM"); > curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); > //VERIFYPEER is false because otherwise we get this: > //cURL error: SSL certificate problem, verify that the CA cert is > OK. Details: > //error:14090086:SSL > routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed > curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); > > curl_setopt($ch, CURLOPT_POST, true); > curl_setopt($ch, CURLOPT_POSTFIELDS, $request); > curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: > application/json')); > curl_setopt($ch, CURLOPT_HEADER, false); //FALSE to exclude the > header from the output (otherwise it screws up json_decode) > curl_setopt($ch, CURLOPT_NOBODY, false); //FALSE because we want > the body too > curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // get the response > as a string from curl_exec(), rather than echoing it > curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); // don't use a > cached version of the url > //curl_setopt($ch, CURLOPT_TIMEOUT, 4); > $returnData = curl_exec($ch); > if (curl_errno($ch)) print "\n\ncURL error: > ".curl_error($ch)."\n\n"; > $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); > curl_close($ch); > > if ( $httpcode == "200" ) > { > $PASS = true; > } > > if ($OPTION['debug']) echo "\nDART API JSON-RPC POST method ".( > ($PASS) ? "SUCCESSFULL" : "FAILED" ).".\n\n"; > > if ($PASS) > return json_decode($returnData,true); > //return $returnData; > else > exit(); > } > ?> > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > Thanks for sharing. It's nice to see the example code for working with SSL using curl. Adam -- Nephtali: PHP web framework that functions beautifully http://nephtaliproject.com
|
Pages: 1 Prev: session data Next: Preg Match Problem |