kuniku’s diary

はてなダイアリーから移行(旧 d.hatena.ne.jp/kuniku/)、表示がおかしな箇所はコメントをお願いします。記載されている内容は日付およびバージョンに注意してください。直近1年以上前は古い情報の可能性が高くなります。

Jakarta CommonsのHttpClientを使う

試したのは、バージョン3.1で、それを使うには、

  • commons-codec-1.3.jar
  • commons-logging (おそらく)

が必要。
commons-codec-1.3.jarが存在していないと

org.apache.commons.httpclient.util.
 URIUtil.encodeQuery(encodeQuery(String unescaped, String charset);

を実行(エンコード処理を行う)した際に
java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException
となる。
他にも同様に発生する箇所はあるだろう。



ResponseBodyAsString()メソッドをつかった場合

GetMethod method = new GetMethod(・・・);
method.getResponseBodyAsString();

とすると、

WARN [org.apache.commons.httpclient.HttpMethodBase] - Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.

Stringでなく、Streamを使いなさいよと警告されるけれども

↓のようなレスポンスボディを取得する長さのMaxを指定すれば警告はでない。

method.getResponseBodyAsString(1024*2);

ただし、content.lengthを指定するので、リクエストして取得した内容が欠ける
可能性があるかも。固定長もしくは、おおよそのボディの長さが判明している場合
のみ使用しないと危険。