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 文件下载。