Bitcoind JSON-RPC: клиент Java-джерси: неожиданный конец файла с сервера Ошибка
Я очень плохо знаком с биткойнами, и это мой первый эксперимент с биткойнами.
Мы пытались разработать Java-приложение на BTC, используя bitcoind (используя testnet). Мы используем простой HTTP Post, используя клиент Джерси с базовой аутентификацией, как указано ниже. У нас уже есть клиент-джерси как часть проектных зависимостей. Мы работаем на Mac OS. Биткойн и 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
Также я попытался интегрировать с bitcoind с помощью клиента json-rpc, что привело к той же ошибке.
Действительно ценю любую помощь в устранении этой ошибки. Заранее спасибо. Дайте мне знать, если вам нужны дополнительные подробности.
С уважением, Манджунатх
====== РЕДАКТИРОВАТЬ ======
Когда я проверяю запрос и ответ, в сценарии сбоя HTTP выдается ошибка "Удаленный сервер закрыл соединение перед отправкой заголовка ответа". Ниже приводится содержание данных запроса:
URL: http://192.168.2.111:18333/
Запрос данных:
{"method": "getblockcount", "params": [], "id": "1"}
Пожалуйста, помогите мне понять, где ошибка.
================ РЕДАКТИРОВАТЬ =================
Добавлены следующие записи в bitcoin.conf, чтобы разрешить подключения от клиента. Но все еще сталкивается с той же ошибкой:
rpcallowip=192.168.2.111
rpcallowip=127.0.0.1
С уважением, Манджунатх
1 ответ
После всех настроек я могу заставить его работать должным образом. В интересах других, вот код Java для выполнения вызовов JSON-RPC для биткойн (с использованием клиента 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
Убедитесь, что вы изменили номер порта и не забудьте предоставить запись rpcallowip, указывающую на соответствующий IP-адрес.
Код клиента:
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);
Это оно. Тебе хорошо начать с интеграции биткойнов.
С уважением, Манджунатх