wget のスラッシュ処理
wget で
wget -q -O - "http://bulkfeeds.net/app/add.xml?url=http://nao.s164.xrea.com/td/index.rdf"
みたいにして送ってたんだけど,wget が古い (少なくとも 1.5.3 以下) だと
<?xml version="1.0" encoding="UTF-8" ?> <result> <errors> <error>http:/nao.s164.xrea.com/td/index.rdf</error> </errors> </result>
みたいなエラーが返ってきてしまう.どうも URL 中の 2 度目以降の "//" が "/" になってしまうのが原因のようだ.
"/" を "%2F" にしても,スラッシュの数をやたらと増やしてみてもだめぽ.
wget -d でデバッグ情報を出してみると,
parseurl ("http://bulkfeeds.net/app/add.xml?url=http://nao.s164.xrea.com/td/index.rdf") -> host bulkfeeds.net -> opath app/add.xml?url=http://nao.s164.xrea.com/td/index.rdf -> dir app/add.xml?url=http://nao.s164.xrea.com/td -> file index.rdf -> ndir app/add.xml?url=http:/nao.s164.xrea.com/td
とかなってて,ndir を求める時点でスラッシュが削られてるっぽい.ソースを読んだらここで path_simplify() という関数を呼んでて,中にこんなコードがあった.
/* Handle multiple `/'s in a row. */ while (path[i] == '/') i++; if ((start + 1) != i) { strcpy (path + start + 1, path + i); i = start + 1; }
思い切って wget を 1.10.2 にしたら直った.ソースは全く別物になっていた.