您的位置:网站首页 > DAO/DAPP钱包软件 > 正 文 比特币

维基百科关于操纵比特币客户端的相关API

【作者:网文】 来源:转载 日期:2012-9-16 23:38:57 人气: 标签:比特币 【打印】

操控 bitcoin 软件
运行 bitcoind 或 bitcoin -server. 你可以通过命令行或HTTP JSON-RPC 命令来操控它.

首先你需要创建bitcoin.conf配置文件并设置rpcuser和rpcpassword;详情请查看运行Bitcoin

示例:

 $ ./bitcoind
 bitcoin server starting
 $ ./bitcoind help
 # shows the help text

RPC调用列表将显示

 $ ./bitcoind getbalance
 2000.00000

JSON-RPC
运行'bitcoin -server'或'bitcoind' 将使bitcoin以HTTP JSON-RPC服务器模式运行,但与其通信时必须使用http://localhost.:8332,安全起见,默认情况下服务器只接受同一机器上其他进程的连接。如果你的HTTP或JSON库需要你指定已认证的'realm',请使用'jsonrpc'。

0.3.14版之后版本的Bitcoin支持SSL (https) JSON-RPC连接。配置详情请参考本页面。

你需要和你使用语言对应的http://127.0.0.1:8332/来访问服务器
Python
python-jsonrpc 是JSON-RPC在Python上的官方实现。它自动生成RPC调用的Python方法。但为了支持旧版本的Python,它效率地下。

jgarzik创建了Python-BitcoinRPC 分支,它对新版本的Python进行了优化(最低需要 Python 2.6+, 而非3.x). 推荐这个版本。

尽管BitcoinRPC缺少jsonrpc的一些特性,在编写仅使用ServiceProxy类的软件时,两个版本可以使用相同的代码

  from jsonrpc import ServiceProxy
 
  access = ServiceProxy("http://user:password@127.0.0.1:8332")
  access.getinfo()
  access.listreceivedbyaddress(6)
  #access.sendtoaddress("11yEmxiMso2RsFVfBcCa616npBvGgxiBX", 10)
Ruby
=begin
Make sure to do:
    gem install rest-client
 
Usage:
    h = ServiceProxy.new('http://user:password@127.0.0.1:8332')
    puts h.getinfo.call
    puts h.getbalance.call 'accname'
=end
require 'json'
require 'rest_client'
 
class JSONRPCException < RuntimeError
    def initialize()
        super()
    end
end
 
class ServiceProxy
    def initialize(service_url, service_name=nil)
        @service_url = service_url
        @service_name = service_name
    end
 
    def method_missing(name, *args, &block)
        if @service_name != nil
            name = "%s.%s" % [@service_name, name]
        end
        return ServiceProxy.new(@service_url, name)
    end
 
    def respond_to?(sym)
    end
 
    def call(*args)
        postdata = {"method" => @service_name, "params" => args, "id" => "jsonrpc"}.to_json
        respdata = RestClient.post @service_url, postdata
        resp = JSON.parse respdata
        if resp["error"] != nil
            raise JSONRPCException.new, resp['error']
        end
        return resp['result']
    end
end
PHP
用JSON-RPC PHP库连接Bitcoin非常简单,例如:

  require_once 'jsonRPCClient.php';
 
  $bitcoin = new jsonRPCClient('http://user:password@127.0.0.1:8332/');
 
  echo "\n";
  print_r($bitcoin->getinfo()); echo "\n";
  echo "Received: ".$bitcoin->getreceivedbylabel("Your Address")."\n";
  echo "";
Java
让Java使用HTTP基本认证的最简单方法是创建default Authenticator

  final String rpcuser ="...";
  final String rpcpassword ="...";
 
  Authenticator.setDefault(new Authenticator() {
      protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication (rpcuser, rpcpassword.toCharArray());
      }
  });
这样一来,任何JSON-RPC Java库(或 URL POSTs)都可以和Bitcoin 服务器通信了。

Perl
用CPAN 的 JSON::RPC 包可以和Bitcoin通信。首先你必须设置客户端证书,例如:

  use JSON::RPC::Client;
  use Data::Dumper;
 
  my $client = new JSON::RPC::Client;
 
  $client->ua->credentials(
     'localhost:8332', 'jsonrpc', 'user' => 'password'  # REPLACE WITH YOUR bitcoin.conf rpcuser/rpcpassword
      );
 
  my $uri = 'http://localhost:8332/';
  my $obj = {
      method  => 'getinfo',
      params  => [],
   };
 
  my $res = $client->call( $uri, $obj );
 
  if ($res){
      if ($res->is_error) { print "Error : ", $res->error_message; }
      else { print Dumper($res->result); }
  } else {
      print $client->status_line;
  }
.NET (C#)
使用标准的httprequest/response 对象可与rpc服务通信。 用序列化/反序列化Json库可以轻松许多:

JayRock for .NET 4.0
Json.Net for .NET 2.0 and above
下面的例子使用Json.Net:

 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://localhost.:8332");
 webRequest.Credentials = new NetworkCredential("user", "pwd");
 /// important, otherwise the service can't desirialse your request properly
 webRequest.ContentType = "application/json-rpc";
 webRequest.Method = "POST";
 
 JObject joe = new JObject();
 joe.Add(new JProperty("jsonrpc", "1.0"));
 joe.Add(new JProperty("id", "1"));
 joe.Add(new JProperty("method", Method));
 // params is a collection values which the method requires..
 if (Params.Keys.Count == 0)
 {
  joe.Add(new JProperty("params", new JArray()));
 }
 else
 {
     JArray props = new JArray();
     // add the props in the reverse order!
     for (int i = Params.Keys.Count - 1; i >= 0; i--)
     {
        .... // add the params
     }
     joe.Add(new JProperty("params", props));
     }
 
     // serialize json for the request
     string s = JsonConvert.SerializeObject(joe);
     byte[] byteArray = Encoding.UTF8.GetBytes(s);
     webRequest.ContentLength = byteArray.Length;
     Stream dataStream = webRequest.GetRequestStream();
     dataStream.Write(byteArray, 0, byteArray.Length);
     dataStream.Close();
 
     WebResponse webResponse = webRequest.GetResponse();
 
     ... // deserialze the response
命令行 (cURL)
用cURL或其他命令行HTTP-fetching可以发送命令并查看结果,例如:
  curl --user user --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }'
    -H 'content-type: text/plain;' http://127.0.0.1:8332/
你将获得你的rpcpassword,然后你会看到类似下面的信息

  {"result":{"balance":0.000000000000000,"blocks":59952,"connections":48,"proxy":"","generate":false,
     "genproclimit":-1,"difficulty":16.61907875185736,"error":null,"id":"curltest"}

返回顶部】【关闭窗口 风险提示:本站分享转载的信息均来自互联网,且仅供阅读参考,不作为具体投资的依据,据此入市,风险自担。本站所有内容涉及到的“货币”字眼需谨慎研判,我们维护各国法币的合法地位,同时数字资产具有货币的某些属性,目前是不能替代任何国家的法定货币的,请谨慎理解投资并严格遵守各国法律法规!详见本站[免责声明]。】
【读完这篇文章后,可否发表您的感受?】
0
0
0
0
0
0
0
0
本文网址:
安全联盟站长平台 互联网举办平台 公共信息安全网监 中国网安 赛门铁克安全响应中心