Bitcoind JSON-RPC:Java Jersey 客户端:来自服务器错误的文件意外结束
Posted
技术标签:
【中文标题】Bitcoind JSON-RPC:Java Jersey 客户端:来自服务器错误的文件意外结束【英文标题】:Bitcoind JSON-RPC : Java Jersey Client : Unexpected end of file from server Error 【发布时间】:2014-09-08 14:42:47 【问题描述】:我对比特币很陌生,这是我第一次尝试使用 bitcoind。
我们一直在尝试使用 bitcoind(使用 testnet)在 BTC 上开发基于 Java 的应用程序。我们使用带有基本身份验证的 Jersey 客户端使用简单的 HTTP Post,如下所示。我们已经将 jersey 客户端作为项目依赖项的一部分。我们在 Mac OS 上运行。 bitcoind 和 java 客户端托管在同一个系统中。
Client client = Client.create();
String url = "http://"+username+':'+password+"@localhost:18333";
//String url = "http://localhost:18333";
System.out.println("URL is : "+url);
WebResource webResource = client.resource(url);
Authenticator.setDefault(new Authenticator()
protected PasswordAuthentication getPasswordAuthentication()
return new PasswordAuthentication (username, password.toCharArray());
);
String input = "\"method\":\"getblockcount\",\"params\":[],\"id\":\"1\"";
ClientResponse response = webResource.type("application/json").post(ClientResponse.class, input);
当我们执行这个时,我们得到了
Caused by: java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:772)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769)
据我了解的例外情况是,存在一些服务器端错误,但我无法在日志文件中看到错误。 degug.log 没有提供任何详细信息。
bitcoin.conf文件中的条目如下:
rpcuser=bitcoinrpc
rpcpassword=5UKQTzWTf7EEJnkShZhr9tbjpDVNmLMgQkFfWsnZhLey
testnet=1
server=1
我也尝试使用 json-rpc 客户端与 bitcoind 集成,这导致了同样的错误。
非常感谢解决此错误的任何帮助。先感谢您。如果您需要更多详细信息,请告诉我。
问候, 曼朱纳特
====== 编辑 ======
当我检查请求和响应时,它给出“远程服务器在发送响应标头之前关闭连接”错误作为 HTTP 失败场景的一部分。以下是请求数据内容:
网址:http://192.168.2.111:18333/
请求数据:
“方法”:“getblockcount”, “参数”:[], “身份证”:“1”
请帮助我了解错误在哪里。
================ 编辑=================
将以下条目添加到 bitcoin.conf 以允许来自客户端的连接。但仍然面临同样的错误:
rpcallowip=192.168.2.111
rpcallowip=127.0.0.1
问候, 曼朱纳特
【问题讨论】:
【参考方案1】:经过所有的调整,我能够让它正常工作。为了他人的利益,这里是对 bitcoind 进行 JSON-RPC 调用的 Java 代码(使用 Jersey 客户端):
bitcoin.conf 条目:
rpcuser=bitcoinrpc
rpcpassword=5UKQTzWTf7EEJnkShZhr9tbjpDVNmLMgQkFfWsnZhLey
testnet=1
server=1
#txindex=1
rpcallowip=192.168.2.*
rpcallowip=127.0.0.1
rpcport=8999
#rpctimeout=60000
确保您更改了端口号,并且不要忘记提供指向相应 IP 地址的 rpcallowip 条目。
客户代码:
DefaultClientConfig config = new DefaultClientConfig();
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
Boolean.TRUE);
Client client = Client.create(config);
client.addFilter(new HTTPBasicAuthFilter(username, password));
WebResource webResource = client.resource(url);
String input = "\"id\":\"jsonrpc\",\"method\":\"listaccounts\",\"params\":[]";
ClientResponse response = webResource.accept("application/json").type("application/json")
.post(ClientResponse.class, input);
就是这样。您可以从 bitcoind 集成开始。
问候, 曼朱纳特
【讨论】:
以上是关于Bitcoind JSON-RPC:Java Jersey 客户端:来自服务器错误的文件意外结束的主要内容,如果未能解决你的问题,请参考以下文章
为 java 和 javascript 推荐一个 JSON-RPC 库 [关闭]