仕事。Flash とサーバサイドスクリプトの連携ってやつ。
データのやりとりは XML-RPC でやってみることにして、 sourceforge.net にあった XML-RPC Flash Client Library を使って実験。サーバ側は Perl で、XMLRPC::Lite (SOAP::Lite に同梱) を使う。
Flash から RPC を Call すると、送られている XML 自体は問題なさそうなのにサーバがエラーを返す。 エラーメッセージによると、HTTP ヘッダの Content-Type が application/x-www.form-urlencoded になっているのがいけないようで。 text/xml でなくては XMLRPC::Lite が受け取ってくれない。
Content-Type を指定するために、
this.methodCall.contentType = "text/xml";
と .as ファイルに追加してみるが、なぜか指定が効かず。常に application/x-www.form-urlencoded で送信されてしまう。なぜだ。
検索した結果、Flash XML FAQ の日本語訳に、
バージョン5,0,42,0のプレーヤーでは(Webブラウザを通した場合のみ)、contentTypeという新しいXMLメンバがあり、content typeを"text/xml"にセットできる。
という記述が。実験はプレビューから行っていたのだが、試しに swf に書き出してブラウザ経由で実行すると ・・・通った。MX になってもこのバグ (なのか?) があるのね。つかえねー。
しかしいちいち swf に書き出さねば実験できないのはいかにも不便。 サーバ側の CGI のほうで、
BEGIN { $ENV{CONTENT_TYPE} = 'text/xml'; };
と、強制的に Content-Type を上書きしてやって誤魔化すという手もあるが、これも美しくないなあ。