java.net.HttpURLConnection を用いた実装にあたっての注意点
HttpURLConnectionクラスは,以下のように利用されるのが一般的である.
URL url = new URL("http://foo.com/hoge.html"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); int responseCode conn.getResponseCode(); InputStream is = conn.getInputStream(); byte[] buf = new byte[1024]; while(len = is.read(buf)) != -1){ System.out.println(buf); }
しかし,サイトの中には(telnet foo.com 80 でアクセスできるにもかかわらず) HttpURLConnection.getResponseCode() に対してレスポンスを返さないサーバも存在するようで,結果として getResponseCode() から制御が戻らないという状況に陥る.
このような状況に対応するため,クライアント側で ReadTimeout を設定する方がよい.具体的なコードは以下のとおり:
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setReadTimeout(5000); //タイムアウト時間は 5000ミリ秒 int responseCode conn.getResponseCode();
また,必要に応じて setConnectTimeout() も設定するとよいかもしれない.