我想使用java连接到bitcoind。我的计划是使用htmlunit和gson。现在,我可以成功地完成一个请求。但是,由于在第五个请求中抛出了一个SocketTimeoutException,所以我不能完成超过四个后续请求。
我试过:
getinfoo而不是getinfo。(在四次请求失败后,我没有得到超时)如有任何帮助或评论,我们将不胜感激!
package test;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.HttpMethod;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebRequest;
import com.google.gson.Gson;
import java.io.IOException;
import java.net.SocketTimeoutException;
import java.net.URL;
public class Test {
    public static void main(String[] args) {
        WebClient client = new WebClient(BrowserVersion.FIREFOX_24);
        // http://[bitcoind-user]:[password]@localhost:[bitcoind-port]
        String baseUrl = "http://admin:admin@localhost:8332/";
        client.getOptions().setTimeout(2000);
        while (true) {
            try {
                WebRequest req = new WebRequest(new URL(baseUrl));
                req.setAdditionalHeader("Content-type", "application/json");
                req.setHttpMethod(HttpMethod.POST);
                JSONRequestBody body = new JSONRequestBody();
                body.setMethod("getinfo");
                req.setRequestBody(new Gson().toJson(body, JSONRequestBody.class));
                client.getPage(req);
                client.closeAllWindows();
                System.out.println("ok. (No Exception)");
            } catch (SocketTimeoutException tex) {
                System.out.println("not ok: SocketTimeoutException");
            } catch (IOException ex) {
                System.out.println("not ok: IOException");
            } catch (FailingHttpStatusCodeException hex) {
                System.out.println("not ok: FailingHttpStatusCodeException");
            }
        }
    }
}(编辑:)
删除.setTimeout(2000)也无济于事。测量每个请求的时间表明它们非常快:
ok. (No Exception)             Timer:  1.161 seconds
ok. (No Exception)             Timer:  0.112 seconds
ok. (No Exception)             Timer:  0.115 seconds
ok. (No Exception)             Timer:  0.075 seconds
not ok: SocketTimeoutException Timer: 90.119 seconds
not ok: SocketTimeoutException Timer: 90.145 seconds
not ok: SocketTimeoutException Timer: 90.134 seconds在使用curl的终端中多次重复相同的请求总是花费不到1秒的时间,所以bitcoind不应该引起问题。
发布于 2014-04-20 14:17:35
首先,尝试删除这一行:
client.getOptions().setTimeout(2000);如果客户端花费2秒钟或更长时间来处理第五个请求,那么显然会出现超时异常,从而导致失败。
其次,如果您不需要JavaScript,请确保禁用它,因为处理它也需要超过2秒的时间。
https://stackoverflow.com/questions/23180542
复制相似问题