Music Catch 是 Reflexive 出品的一款音乐游戏,其PC版本收费,但有两个免费的Flash版本。版本一是一个非常有限的预览版,只内置了一首音乐;版本二不仅内置了更多音乐,并拥有更多选项,它还支持从URL获取外部音乐:

不过,这些选项要逐个解锁——即完成它们。好不容易全部解锁后,终于可以播放自己的歌曲了。搭建个HTTP服务器,却发现需要公网能访问才行,而且速度死慢死慢的——因为它是从自家的网站的一个代理获取歌曲文件的。这也是Flash跨域请求的限制。简单抓包下就可以知道该怎么对付了。
首先修改 hosts 文件,把那个代理劫持到自己机器上:
127.0.0.1 wgextras.gamecentersolution.com
然后是crossdomain.xml文件,把它放自己的根目录下。
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*"/>
</cross-domain-policy>
最后是那个代理脚本了,路径是/proxy.php。我简单地用PHP写了个:
<?php
# 为 Music Catch 2 而写
# 使其可以直接从本地读取音乐文件
error_reporting(0);
if($_POST['MusicCatch']){
$mp3 = file_get_contents($_GET["url"]);
header("Content-Length: ".strlen($mp3));
header("Last-Modified: ".gmdate("F d Y H:i:s")." GMT");
header("Connection: close");
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename=\"song.mp3\"");
header("Content-Type: audio/mpeg");
echo $mp3;
}else{
header("HTTP/1.1 400 Bad Request");
?>
<title>400 Bad Request</title>
<h1>400 Bad Request</h1>
<hr/>
<p>This page is intended for Music Catch 2.</p>
<?php
}
?>
就是这样。现在再从URL加载音乐时,只需要一两秒的时间了。

最后,Music Catch 2 SWF 文件下载。
