Music Catch 是 Reflexive 出品的一款音乐游戏,其PC版本收费,但有两个免费的Flash版本。版本一是一个非常有限的预览版,只内置了一首音乐;版本二不仅内置了更多音乐,并拥有更多选项,它还支持从URL获取外部音乐:
不过,这些选项要逐个解锁——即完成它们。好不容易全部解锁后,终于可以播放自己的歌曲了。搭建个HTTP服务器,却发现需要公网能访问才行,而且速度死慢死慢的——因为它是从自家的网站的一个代理获取歌曲文件的。这也是Flash跨域请求的限制。简单抓包下就可以知道该怎么对付了。
首先修改 hosts 文件,把那个代理劫持到自己机器上:
1 | 127.0.0.1 wgextras.gamecentersolution.com |
然后是crossdomain.xml文件,把它放自己的根目录下。
1 2 3 4 | < cross-domain-policy > < site-control permitted-cross-domain-policies = "master-only" /> < allow-access-from domain = "*" /> </ cross-domain-policy > |
最后是那个代理脚本了,路径是/proxy.php
。我简单地用PHP写了个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?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 文件下载。