HttpClientでのタイムアウトの補足
以前HttpClientのタイムアウトについて書いたのですが、ちょっと不十分だと思ったので補足です。
HttpConnectionManagerParams params = new HttpConnectionManagerParams();
params.setConnectionTimeout(3000); // タイムアウトmsec
HttpConnectionManager manager = new SimpleHttpConnectionManager();
manager.setParams(params);
HttpClient client = new HttpClient(manager);
GetMethod method = new GetMethod(url);
client.executeMethod(method);
だと、Connectionのタイムアウトは設定できるのですが、つながった後に時間がかかる場合などタイムアウトしてくれません。
URLConnectionと同じようにソケットのタイムアウトを指定すればOKです。
HttpConnectionManagerParams params = new HttpConnectionManagerParams();
params.setConnectionTimeout(3000); // コネクションタイムアウトmsec
params.setSoTimeout(1000); // ソケットタイムアウトmsec
HttpConnectionManager manager = new SimpleHttpConnectionManager();
manager.setParams(params);
HttpClient client = new HttpClient(manager);
GetMethod method = new GetMethod(url);
client.executeMethod(method);
で、1秒でタイムアウトします。
タイムアウトした場合はSocketTimeoutExceptionをThrowしてくれます。
Exception in thread "main" java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
Posted in Java |

5月 8th, 2008 at 19:11:11
[…] HttpClientでのタイムアウトの補足 | mono-blog なんかを見ると、HttpConnectionManagerParams […]