wget のスラッシュ処理

bulkfeeds.net に ping を送るとき,

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 にしたら直った.ソースは全く別物になっていた.