• HttpURLConnectionのタイムアウト

    2012年03月31日 12時09分
    JavaでHTTP接続が必要になったので、HttpURLConnectionを使おうと思ったのですが、
    connect timeoutとread timeoutの意味がよくわからなかったので調べました。

    調べた環境はjdk1.7.0_02 (Windows 64bit)です。

    connect timeout

    connect timeoutは接続にかかった時間で、setConnectTimeoutで設定します。

    引数はミリ秒で指定し、0を指定すると無限になります。
    デフォルト値はJavadocに書いてないのですが、0になっています。


    connect timeoutが発生するのはconnectメソッド内です。
    接続にかかった時間がtimeout値を超えるとSocketTimeoutExceptionが発生します。


    read timeout

    read timeoutはデータ取得にかかった時間で、setReadTimeoutで設定します。
    (リクエストを投げてレスポンスが帰ってくるまでの時間)

    引数はミリ秒で指定し、0を指定すると無限になります。
    デフォルト値はJavadocに書いてないのですが、0になっています。


    read timeoutが発生するのは、レスポンスデータを参照するメソッドです。
    • getContent
    • getHeaderFields
    • getInputStream
    • getResponseCode
    • getResponseMessage
    • getContentEncoding
    • getContentLength
    • getContentLengthLong
    • getContentType
    • getDate
    • getExpiration
    • getHeaderField
    • getHeaderFieldDate
    • getHeaderFieldInt
    • getHeaderFieldKey
    • getLastModified

    ただ、上記の内、SocketTimeoutExceptionが発生するのは次のメソッドだけです。
    • getContent
    • getHeaderFields
    • getInputStream
    • getResponseCode
    • getResponseMessage

    他のメソッドはnullとか0とかエラー値を返すだけです。
    SocketTimeoutExceptionが発生しないメソッドだけを使うと、
    timeoutが起こったことがわからないので注意が必要です。

    どのメソッドが例外を投げるかはJavadocに書いてないので実際の動作からしか読み取れません。
    (getInputStreamだけは書いてあったりしてますますよくわかりません。)
    実際に使用する環境でも念のため調べておいた方が無難でしょう。

    コメントを書く

    名前
    本文
    編集用パスワード 入力すると編集が行えます
    管理者のみ閲覧