0

Java から Bitcoin ウォレットに接続しようとしています。しかし、ネットワーク例外が発生します: サーバーがリダイレクトされすぎます。誰かが私を理解するのを手伝ってくれたら、とてもうれしいです。これが私のコードです:

public static void SetupRPC() {
    CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
    Authenticator.setDefault(new Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication ("admin", "admin".toCharArray());
        }
    });

    URL serverURL = null;
    try {
        serverURL = new URL("http://127.0.0.1:44843");
    } catch (MalformedURLException e) {
        System.err.println(e.getMessage());
    }

    JSONRPC2Session mySession = new JSONRPC2Session(serverURL);
    String method = "getinfo";
    int requestID = 0;
    JSONRPC2Request request = new JSONRPC2Request(method, requestID);

    // Send request
    JSONRPC2Response response = null;

    try {
        response = mySession.send(request);
    } catch (JSONRPC2SessionException e) {
        System.err.println(e.getMessage());
    }

    if (response.indicatesSuccess())
        System.out.println(response.getResult());
    else
        System.out.println(response.getError().getMessage());
}

および .conf ファイル:

rpcuser="admin"
rpcpassword="admin"
rpcallowip=*
rpcport=44843
server=1
daemon=1
listen=1
rpcconnect=127.0.0.1
4

2 に答える 2

0

わかりました、私はこの問題を解決します:

Authenticator.setDefault(new Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("user", "pass".toCharArray());
        }
    });
    String uri = "http://127.0.0.1:8332";
    String requestBody = "{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"getbalance\"}";
    String contentType = "application/json";
    HttpURLConnection connection = null;
    try {
        URL url = new URL(uri);
        connection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", contentType);
        connection.setRequestProperty("Accept", "application/json");
        connection.setRequestProperty("Content-Length", Integer.toString(requestBody.getBytes().length));
        connection.setUseCaches(true);
        connection.setDoInput(true);
        OutputStream out = connection.getOutputStream();
        out.write(requestBody.getBytes());
        out.flush();
        out.close();
    } catch (IOException ioE) {
        connection.disconnect();
        ioE.printStackTrace();
    }

    try {
        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream is = connection.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is));
            String line;
            StringBuffer response = new StringBuffer();
            while ((line = rd.readLine()) != null) {
                response.append(line);
                response.append('\r');
            }
            rd.close();
            System.out.println(response);
        } else {
            connection.disconnect();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
于 2014-03-03T11:31:37.477 に答える
0

これらがコードと .conf である場合は"、conf ファイルから を削除します。または、文字列に追加\"します。したがって、この

return new PasswordAuthentication ("\"admin\"", "\"admin\"".toCharArray());

またはこれ

rpcuser="admin"
rpcpassword="admin"

また、パスワードまたはユーザー名に # を含めることはできません (これは私の場合でした)。

これを見つけた後、Invalid JSON-RPC 2.0 response.

私の解決策は、JSONRPC2Parser.java の JSONRPC 2.0 のベースにある関数 を 495 行目あたりに変更!jsonObject.containsKey("error")することでした。(!jsonObject.containsKey("error") || jsonObject.get("error") == null)public JSONRPC2Response parseJSONRPC2Response(final String jsonString)

編集: これは DogeCoin-QT にあったため、おそらく Bitcoin-QT にはこの問題はありません。

于 2014-03-03T03:10:50.183 に答える