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);

Это оно. Тебе хорошо начать с интеграции биткойнов.

С уважением, Манджунатх

Другие вопросы по тегам