无法从Jersey HttpClient调用比特币RPC

时间:2014-12-15 02:12:43

标签: java jersey bitcoin

即时通讯使用dropwizard。从资源我尝试通过Jersey HttpClient使用比特币rpc。

使用curl就像魅力一样: $ curl --user user:password -X POST -d'{“jsonrpc”:“1.0”,“id”:“curltest”,“method”:“getinfo”,“params”: []}'-H'content-type:text / plain;' http://domain.name:18332/

但是某种方式从资源中使用Jersey HTTP客户端不起作用:

    //init in run methode
    final Client client = new JerseyClientBuilder(e).using(c.getJerseyClientConfiguration()).build(getName());
    HTTPBasicAuthFilter httpBasicAuth = new HTTPBasicAuthFilter("user", "password");
    client.addFilter(httpBasicAuth);

    //From the resource
    WebResource webRes = client.resource("http://domain.name:18332/");      
    webRes.header("content-type", "text/plain");

    RPC_REQUEST rpc = new RPC_REQUEST("1.0", "curltest", "getinfo", new ArrayList<String>());
    String response = webRes.post(String.class, JSONParserHelper.parseJSONToString(rpc));

JSONParserHelper.parseJSONToString(rpc)返回以下字符串:

    {"jsonrpc":"1.0","id":"curltest","method":"getinfo","params":[]}

以下错误是在“webRes.post”行中引起的:

    ! com.sun.jersey.api.client.UniformInterfaceException: Client response status: 500

编辑:使用错误的pw导致401.我猜连接应该是正确的,问题出在其他地方。

编辑:使用-d而不是--data-binary

编辑:一旦我回家,我就会从jersey http客户端转发整个请求。

谢谢

1 个答案:

答案 0 :(得分:0)

比特币RPC不支持分块编码请求。 由于Dropbox jersey libs中有一个bug直到0.8,你无法禁用它。

从0.8开始,您可以在配置文件中禁用它。 我必须从0.7迁移到0.8并将其添加到我的配置文件中。

HttpClient的:   ...   chunkedEncodingEnabled:false

顺便提一下好的迁移概述:https://groups.google.com/forum/#!topic/dropwizard-dev/VInOW_ebiAc