Estoy usando Ubuntu Server 12.04. Mi archivo *.conf:
...
# Enable RPC
server=1
# Uncomment to allow localhost to use RPC
rpcallowip=127.0.0.1
# RPC information
# THIS MUST BE CHANGED FOR YOUR SECURITY
rpcuser=username
rpcpassword=passssssssss_new
# Mining is initially disabled
# gen=0
...
Java RPCClient que uso:
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class RPCClient {
private static final String COMMAND_GET_BALANCE = "getbalance";
private static final String COMMAND_GET_INFO = "getinfo";
private static final String COMMAND_GET_NEW_ADDRESS = "getnewaddress";
private JSONObject invokeRPC(String id, String method, List<String> params) {
// CloseableHttpClient httpclient = HttpClientBuilder.create().build();
//
// httpclient.getCredentialsProvider();
DefaultHttpClient httpclient = new DefaultHttpClient();
JSONObject json = new JSONObject();
json.put("id", id);
json.put("method", method);
if (null != params) {
JSONArray array = new JSONArray();
array.addAll(params);
json.put("params", params);
}
JSONObject responseJsonObj = null;
try {
httpclient.getCredentialsProvider().setCredentials(new AuthScope("198.154.*.*", 34907),
new UsernamePasswordCredentials("username", "passssssssss_new"));
StringEntity myEntity = new StringEntity(json.toJSONString());
System.out.println(json.toString());
HttpPost httppost = new HttpPost("http://198.154.*.*:34907");
httppost.setEntity(myEntity);
System.out.println("executing request" + httppost.getRequestLine());
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Response content length: " + entity.getContentLength());
// System.out.println(EntityUtils.toString(entity));
}
JSONParser parser = new JSONParser();
responseJsonObj = (JSONObject) parser.parse(EntityUtils.toString(entity));
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (org.json.simple.parser.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
return responseJsonObj;
}
public Double getBalance(String account) {
String[] params = { account };
JSONObject json = invokeRPC(UUID.randomUUID().toString(), COMMAND_GET_BALANCE, Arrays.asList(params));
return (Double)json.get("result");
}
public String getNewAddress(String account) {
String[] params = { account };
JSONObject json = invokeRPC(UUID.randomUUID().toString(), COMMAND_GET_NEW_ADDRESS, Arrays.asList(params));
return (String)json.get("result");
}
public JSONObject getInfo() {
JSONObject json = invokeRPC(UUID.randomUUID().toString(), COMMAND_GET_INFO, null);
return (JSONObject)json.get("result");
}
public JSONObject getInfo(String command) {
JSONObject json = invokeRPC(UUID.randomUUID().toString(), command, null);
return (JSONObject)json.get("result");
}
/*public static void main(String[] args) {
System.out.println(new RPCClient().getInfo());
}*/
}
resultado actual:
{"id":"60f910c6-a893-4753-a9d3-cbe6973ccb14","method":"getinfo"}
executing requestPOST http://198.154.*.*:34907 HTTP/1.1
----------------------------------------
HTTP/1.1 403 Forbidden
Response content length: 0
Unexpected token END OF FILE at position 0.
at org.json.simple.parser.JSONParser.parse(JSONParser.java:257)
at org.json.simple.parser.JSONParser.parse(JSONParser.java:81)
at org.json.simple.parser.JSONParser.parse(JSONParser.java:75)
at RPCClient.invokeRPC(RPCClient.java:61)
at RPCClient.getInfo(RPCClient.java:96)
at KeccakTest.main(KeccakTest.java:125)
Exception in thread "main" java.lang.RuntimeException: java.lang.NullPointerException
at KeccakTest.main(KeccakTest.java:129)
Caused by: java.lang.NullPointerException
at RPCClient.getInfo(RPCClient.java:97)
at KeccakTest.main(KeccakTest.java:125)
En esta línea:
HttpPost httppost = new HttpPost("http://198.154.*.*:34907");
la dirección 198.154.*.*
no es una sintaxis de dirección IP válida. Si así es realmente como se ve su código fuente, entonces necesita usar una dirección IP completa y válida que sea solo números (por ejemplo, 198.154.1.1
o lo que sea apropiado para su red).
Incluso si está ocultando deliberadamente su dirección IP para nosotros, todavía tiene un problema porque configuró rpcallowip=127.0.0.1
lo que solo permite que esa dirección se comunique con el servidor RPC. Agregue otra rpcallowip
línea que contenga la dirección de la máquina donde está ejecutando este código Java.
usuario11221
rpcallowip=THE_OTHER_HOSTS_IP
(o una máscara de IP para permitir el acceso a toda la subred, orpcallowip=*
para permitir todas las IP). Además, el puerto estándar para la red principal es 8332 y 18332 para testnet.Vitali Grabovski
usuario11221
rpcallowip=*
? Agregue la configuración que está utilizando dentro delRPCClient.java
archivo a su pregunta.Vitali Grabovski