HTMLのDL

さて。。。たまにはSeasar2の関係ないことを。


といってもAPの一部なんだけど、
HTMLのページをごっそり保存したい。という話。
たとえば、IEの名前をつけて保存をまるまる行いたい。
ただ、アプリはFedora7上で動いてる。


さて、通常、自分のやろうと思うことぐらい、
他の人がすでに解決している。


というのを師匠に言われて以来、座右の銘にしているわけですが、
いまいちぱっとする検索結果が出てこないので、
結局ごりごりロジックを書いているわけですが、

  1. ページ保存
  2. リンク解析
  3. 画像等のリソース保存(命名IE準拠)
  4. ページのリンクを書き換え

まず第一段階として
Content-typeの判別は意外に面倒なわけで・・・
すなおにResponseに設定されていれば、メソッド一発なんだけど、
大概の場合セットされていない。


というわけで判別処理のメモ


こんな感じで判定している。
固定文字を返しているのはnullチェックがめんどいから。


BOMは胡散臭いこんな感じでチェック

	public static final int[] BOM = new int[]{65533, 65403, 65407};
	private static final boolean isBOM(String text) {
		if(text == null || text.length() == 0) {
			return false;
		}
		for (int i = 0; i < BOM.length; i++) {
			int c = text.charAt(i);
			if(c != BOM[i]) {
				return false;
			}
		}
		return true;
	}

果たして、htmlでBOMくっついていることあるのか不明・・・
UTF-16もどうしたもんだか・・・


普通にストリーム開いてコピーでもいいんだけどね。きっと(commons利用でも)

他の方法

考えられる限りだと、

  1. 上記ストリームのコピー
  2. wget
  3. ActiveXでのIE利用

なんだけど、
wgetだと、サーブレットとかの場合、htmlとして名前指定で保存できない。(指定が悪い?)
なんか画像とかも1ファイルにしようとするし・・・


ActiveXだと、そもそもLinuxだし・・・


ストリームコピーだと、
euc-jpの時結構いや〜な結果になってしまった経験もあるし・・・


というわけでなんだかな〜状態が続いています。