Author

Topic: Blockchain.info RPC JSON API (Read 874 times)

member
Activity: 264
Merit: 16
October 17, 2019, 06:36:30 AM
#5
I just made a test account on blockchain.info and tried to send a simple getinfo request using their json-rpc api:

./bitcoin-cli -rpcconnect=rpc.blockchain.info -rpcport=443 -rpcuser=[my identifier] -rpcpassword=[my password] getinfo

The message i got:
error: couldn't connect to server

If such a simple request, using the standard bitcoin-cli doesn't work, i seriously doubt there's something wrong with your script... I can only assume there is a problem with their api.

(BTW, got the same message when switching the port to 80, apparently -rpcssl is no longer supported)

Hi,
After some time trying to do the same and after googling and read the same you report i was giving up too, but i discovered a way of doing this:

You need to have NPM and NodeJS installed

$ npm install -g blockchain-wallet-service
$ npm update -g blockchain-wallet-service
$ blockchain-wallet-service start-rpc -k API_KEY -p 8000 -b 127.0.0.1 (The API_KEY you need to ask to blockchain.com, maybe you can try with your ID)
$ ./bitcoin-cli -rpcconnect=localhost -rpcport=8000 -rpcuser=wallet_id -rpcpassword=wallet_pasword getbalance

I used "getbalance" because "getinfo" connects but after give some error!
Not all the commands work, but the getbalance works fine with me.

It took me a couple of days, but VOILA  Grin
legendary
Activity: 3346
Merit: 4911
https://merel.mobi => buy facemasks with BTC/LTC
January 23, 2017, 03:29:49 AM
#4
I just made a test account on blockchain.info and tried to send a simple getinfo request using their json-rpc api:

./bitcoin-cli -rpcconnect=rpc.blockchain.info -rpcport=443 -rpcuser=[my identifier] -rpcpassword=[my password] getinfo

The message i got:
error: couldn't connect to server

If such a simple request, using the standard bitcoin-cli doesn't work, i seriously doubt there's something wrong with your script... I can only assume there is a problem with their api.

(BTW, got the same message when switching the port to 80, apparently -rpcssl is no longer supported)
newbie
Activity: 21
Merit: 0
January 23, 2017, 03:22:59 AM
#3
Of course, my config.php is fine, sorry I forgot to put the
Code:
);
ending on the post.

Code:
      $rpc = array(
'login' => 'mywalletID',
'password' => 'mypassword',
'ip' => 'rpc.blockchain.info',
'port' => '80'
      
);
?>

I have tried with:

Code:
  $ip gethostbyname('rpc.blockchain.info');

echo 
$ip;

?>

to get the DNS from the rpc.blockchain.info domain, but it doesn't solve it either.

I'm using this jsonRPCClient.php version:
Code:
/*
COPYRIGHT
Copyright 2007 Sergio Vaccaro 
This file is part of JSON-RPC PHP.
JSON-RPC PHP is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
JSON-RPC PHP is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JSON-RPC PHP; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
/**
 * The object of this class are generic jsonRPC 1.0 clients
 * http://json-rpc.org/wiki/specification
 *
 * @author sergio 
 */
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;
}
}
}
?>
legendary
Activity: 1736
Merit: 1023
January 23, 2017, 12:02:04 AM
#2
Looks like the config.php file is missing the ending to the array.

It should be the following I believe:
Code:
      $rpc = array(
'login' => 'mywalletID',
'password' => 'mypassword',
'ip' => 'rpc.blockchain.info',
'port' => '80'
                
);
?>


Edit: Actually, it wasn't reporting an error about that so maybe that was just left out when you pasted into the forum post.

The
Code:
No address associated with hostname
error leads me to believe it could be an issue with DNS lookups. Have you verified that the resolver is properly set and that you can resolve domain names on the server?

Do you have a link to the specific version of jsonRPCClient.php you are using?
newbie
Activity: 21
Merit: 0
January 22, 2017, 10:01:59 PM
#1
When I make a API call to my wallet on Blockchain.info it gives me the error:

Warning:  fopen(): php_network_getaddresses: getaddrinfo failed: No address associated with hostname in /home/u2485/public_html/jsonRPCClient.php on line 132

Unable to connect to http://mywalletID:[email protected]:80/' in /home/u2485/public_html/jsonRPCClient.php:140


I'm using the jsonRPCClient.php to communicate to bitcoin server.

I have my config.php file where I specify login, pass, ip, port, etc.

Code:
      $rpc = array(
'login' => 'mywalletID',
'password' => 'mypassword',
'ip' => 'rpc.blockchain.info',
'port' => '80'
?>

And here is the file where I'm connecting with blockchain.info

Code:
	include('config.php');

require_once 'jsonRPCClient.php';
$client = new jsonRPCClient('http://' $rpc['login'] . ':' $rpc['password'] . '@' $rpc['ip'] . ':' $rpc['port'] . '/') or die('Error: could not connect to RPC server.');
echo 'Done.';
?>

source: http://blockchain.info/es/api/json_rpc_api
Jump to: