※野球の話ではないです。
なんかですね、2月のころ、「3月になったらやります」とかいろんな人に言ってたんですけど、気がついたら3月も終わってしまい(なので35歳になった)、あと、先週どうも体調が悪くてグダってたら仕事が進まず、気がついたら、12個も並行して仕事しなきゃいかんことになってました。我ながら数えてびっくりした。
で、仕事が終わらないこととか忙しいことは恥ずかしいことなので、なんかこう、自虐的に自慢気な感じで書いてて、自分でもなんだかなあと思ったのですが、ここんところあまり寝てないので許してください。
そんな折り(本題に入る合図)、作ってたWebアプリがSoftBankの端末で、
お客様の端末からはご利用になれません。
(WJ46042E)
とか表示されてしまい動かず、「WJ46042E」ってキーワードで検索しても思うような情報は見当たらず、SoftBankのサイトで検索しても何もヒットせず、というか自分とこの端末が出してるエラーコードなんだから情報ぐらい載せろとか思うわけで、かつ、「WJ46042E」っていう意味不明なコード(かつ検索不能なコード)なんか出さない方がマシだろうと思うわけで、ちなみに僕はSoftBankの携帯のCMは嫌いです。考え過ぎだとは重々承知してますが、父親が犬で息子が黒人というのは、何かを暗喩してるんでしょうか。それともこれはPC(パーソナル・コンピュータじゃなくて、ポリティカル・コレクトの方)な感想かなあ。
さておき。
そんでですね、いろいろ実験してたら、なんで動かなかったかというと、Perlのプログラムだったんですけど、CGIモジュールを使ってまして、
print $cgi->redirect("http://www.maborochi.com");
みたいなことをしてたんだけど、これがダメだったらしいんです。こうじゃなくて、
print "Location: http://www.maborochi.com\n\n";
だったら大丈夫だった。んもう、なんだかなあ。
前者の場合、実際には、標準出力に、
Status: 302 Moved Location: http://www.maborochi.com
と出力されます。後者は、
Location: http://www.maborochi.com
だけ。最終的にApacheで(あ、Apache使ってます)まとめられた上でクライアントに送信されるヘッダとしては、前者が、
HTTP/1.1 302 Moved
で、後者が、
HTTP/1.1 302 Found
です。たぶんこの違いが問題なんかな。
あ。
違うかも。
ヘッダを詳細に(というほどでもないけど)見たら、前者は、
Content-Type: application/x-httpd-cgi
ってのが送信されてて、後者は、
Content-Type: text/html; charset=iso-8859-1
みたいなことになってますな。さっき検索してたときに、MIMEタイプの問題がどうのってのを見た覚えがあるから、そのせいなのかも。というわけで追試したところ、
Content-Type: application/x-httpd-cgi
というヘッダを吐くと、
お客様の端末からはご利用になれません。
(WJ46042E)
となるようです。うーん。知らないMIMEタイプに遭遇したらお手上げになるってことか。それはどうなんだろうなあ。まあIEみたく、中身を見て勝手にMIMEタイプを「想像」しちゃうのもどうかとは思うが、お手上げになるのもなあ。text/plain扱いにして表示したら問題なんかな。そんなことないと思うが。
疲れたなあ。
その他にも、Email::Valid(とEmail::Valid::Loose)で、
$email = Email::Valid->address($email) || Email::Valid::Loose($email);
とかやって、
YAMADA Tarou <yamada@example.com>
となってる文字列からアドレスを抜き出したりしてたんだけど、SoftBankの端末のメールアドレスは、
<yamada@example.com>
みたいな形式、つまり<と>で囲まれてるだけという形式がデフォルトらしく、うまくEmail::Valid(とEmail::Valid::Loose)で抜けなかった。うちの会社でテスト用に使ってるSoftBank端末がたまたまそういう設定になってるだけなのかもしれないけど、坊主憎けりゃ袈裟まで憎いですよねえ。
そんな感じ。
2008/07/11(Fri)追記。
Content-Type: application/x-httpd-cgi
になるのはApacheのバージョンによるみたい。1.3.41だと↑みたくなったんだけど、2.0.46 (CentOS)だと、
Content-Type: text/plain
となる模様。
あと、同時にクッキー吐きたいとかでCGI.pm使いたいときは、
print $cgi->redirect( -url => "http://www.maborochi.com", -cookie => $cookie, );
とかすれば良いみたい。