javaを使ってbitcoinに接続したい。私の計画は、htmlunit と gson を使用することです。現在、1 つのリクエストを正常に完了することができます。ただし、5 番目の要求で SocketTimeoutException がスローされるため、正確に4 つ以上の後続の要求を行うことはできません。
私は試した:
- リクエスト間で待機中。(効果は見られません)
- 失敗した http ステータス コードを強制する。たとえば
getinfoo
、getinfo
. (リクエストが4回失敗した後、タイムアウトになりません)
ヘルプやコメントをいただければ幸いです。
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
、問題が発生することはありません。