Title: BitcoinQt RPC Php script not connecting Exception: Incorrect response id Post by: Backedbit on March 25, 2013, 08:27:41 PM Can anyone figure out what's wrong with my php script? The rpc client uses curl to do an http request. The screen output is:
Exception: Incorrect response id (request id: 1, response id: <) in C:\wamp\www\curlsome.php on line 149 SCRIPT CODE: <?php require_once 'curlsome.php'; $bitcoin = new jsonRPCClient('http://localhost:18332', 'user1', 'password1'); echo "<pre>\n"; print_r($bitcoin->getinfo()); echo "\n"; echo "</pre>"; ?> CLIENT CODE: class jsonRPCClient { /** * Debug state * * @var boolean */ private $debug; /** * The server URL * * @var string */ private $url; /** * The request id * * @var integer */ private $id; /** * If true, notifications are performed instead of requests * * @var boolean */ private $notification = false; /** * Takes the connection parameters * * @param string $url * @param boolean $debug */ public function __construct($url,$debug = false) { // server URL $this->url = $url; // proxy empty($proxy) ? $this->proxy = '' : $this->proxy = $proxy; // debug state empty($debug) ? $this->debug = false : $this->debug = true; // message id $this->id = 1; } /** * Sets the notification state of the object. In this state, notifications are performed, instead of requests. * * @param boolean $notification */ public function setRPCNotification($notification) { empty($notification) ? $this->notification = false : $this->notification = true; } /** * Performs a jsonRCP request and gets the results as an array * * @param string $method * @param array $params * @return array */ public function __call($method,$params) { // check if (!is_scalar($method)) { throw new Exception('Method name has no scalar value'); } // check if (is_array($params)) { // no keys $params = array_values($params); } else { throw new Exception('Params must be given as array'); } // sets notification or request task if ($this->notification) { $currentId = NULL; } else { $currentId = $this->id; } // prepares the request $request = array( 'method' => $method, 'params' => $params, 'id' => $currentId ); $request = json_encode($request); $this->debug && $this->debug.='***** Request *****'."\n".$request."\n".'***** End Of request *****'."\n\n"; // performs the HTTP POST $opts = array ('http' => array ( 'method' => 'POST', 'header' => 'Content-type: application/json', 'content' => $request )); $context = stream_context_create($opts); if ($fp = fopen($this->url, 'r', false, $context)) { $response = ''; while($row = fgets($fp)) { $response.= trim($row)."\n"; } $this->debug && $this->debug.='***** Server response *****'."\n".$response.'***** End of server response *****'."\n"; $response = json_decode($response,true); } else { throw new Exception('Unable to connect to '.$this->url); } // debug output if ($this->debug) { echo nl2br($debug); } // final checks and return if (!$this->notification) { // check if ($response['id'] != $currentId) { throw new Exception('Incorrect response id (request id: '.$currentId.', response id: '.$response['id'].')'); } if (!is_null($response['error'])) { throw new Exception('Request error: '.$response['error']); } return $response['result']; } else { return true; } } } ?> Much thanks, Backedbit Title: Re: BitcoinQt RPC Php script not connecting Exception: Incorrect response id Post by: MaxCoins on March 25, 2013, 08:31:19 PM Funny you should post this just now. I was just googling to see if there were any PHP scripts out there for getting MtGox data.
Did you write this from scratch or find it elsewhere? Thanks Title: Re: BitcoinQt RPC Php script not connecting Exception: Incorrect response id Post by: MaxCoins on March 25, 2013, 08:34:43 PM Ooops! Should have read it more carefully.
Are there any existing PHP scripts that utilize the MtGox API that anyone can point me to? Title: Re: BitcoinQt RPC Php script not connecting Exception: Incorrect response id Post by: MaxCoins on March 25, 2013, 08:46:22 PM What I would like to do is collect and track trading data so I can analyze it. I can write it from scratch but I'm sure someone has already written some scripts that have similar functionality - it's almost always the case in such situations, in my experience.
Thanks Title: Re: BitcoinQt RPC Php script not connecting Exception: Incorrect response id Post by: MaxCoins on March 25, 2013, 08:48:12 PM Or maybe that data is already publicly available somewhere and I am being an idiot. ;)
Title: Re: BitcoinQt RPC Php script not connecting Exception: Incorrect response id Post by: MaxCoins on March 25, 2013, 08:52:38 PM Thanks for the offer but its not something I would pay for at this point - more just a matter of curiosity.
Title: Re: BitcoinQt RPC Php script not connecting Exception: Incorrect response id Post by: Backedbit on March 25, 2013, 10:11:53 PM thanks, though I pasted the wrong rpc client. Here is the one I meant to paste. It uses curl (below) and gets the screen output errors described earlier:
thanks. (btw, the changes mentioned earlier worked for my local server, but not with online connections??) <?php class jsonRPCClient { /** * Debug state * * @var boolean */ private $debug; /** * The server URL * * @var string */ private $url; /** * The request id * * @var integer */ private $id; /** * If true, notifications are performed instead of requests * * @var boolean */ private $notification = false; /** * Takes the connection parameters * * @param string $url * @param boolean $debug */ public function __construct($url,$debug = false) { // server URL $this->url = $url; // proxy empty($proxy) ? $this->proxy = '' : $this->proxy = $proxy; // debug state empty($debug) ? $this->debug = false : $this->debug = true; // message id $this->id = 1; } /** * Sets the notification state of the object. In this state, notifications are performed, instead of requests. * * @param boolean $notification */ public function setRPCNotification($notification) { empty($notification) ? $this->notification = false : $this->notification = true; } /** * Performs a jsonRCP request and gets the results as an array * * @param string $method * @param array $params * @return array */ public function __call($method,$params) { // check if (!is_scalar($method)) { throw new Exception('Method name has no scalar value'); } // check if (is_array($params)) { // no keys $params = array_values($params); } else { throw new Exception('Params must be given as array'); } // sets notification or request task // $this->id = rand(0,99999); if ($this->notification) { $currentId = NULL; } else { $currentId = $this->id; } // prepares the request $request = array( 'method' => $method, 'params' => $params, 'id' => $currentId ); $request = json_encode($request); $this->debug && $this->debug.='***** Request *****'."\n".$request."\n".'***** End Of request *****'."\n\n"; // performs the HTTP POST $ch = curl_init($this->url); curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $request); // $response = json_decode(curl_exec($ch),true); $response = curl_exec($ch); json_decode($response, true); curl_close($ch); // debug output // if ($this->debug) { // echo ($debug); //} // final checks and return if (!$this->notification) { // check if ($response['id'] != $currentId) { throw new Exception('Incorrect response id (request id: '.$currentId.', response id: '.$response['id'].')'); } if (!is_null($response['error'])) { throw new Exception('Request error: '.$response['error']); } return $response['result']; } else { return true; } } } ?> Title: Re: BitcoinQt RPC Php script not connecting Exception: Incorrect response id Post by: tutkarz on March 26, 2013, 06:46:55 AM I also had problems with code you posted, so i switched to this and it is working for me (json 2.0).
source from: http://ptrofimov.wordpress.com/2011/04/27/php-class-to-implement-json-rpc-2-0-protocol/ (http://ptrofimov.wordpress.com/2011/04/27/php-class-to-implement-json-rpc-2-0-protocol/) Code: <?php |