我正在编写ActionScript3 Flash游戏,它需要访问赞助商(游戏买家)指定的REST服务 - 比如高分等。我知道如何使用URLLoader,URLRequest,设置URLRequestHeader。
不幸的是赞助商在共享主机上,并且不能将crossdomain.xml放在服务器根目录中,所以我无法从我的localhost flash游戏(Same Origin Policy)连接到它。我了解到有一种方法可以通过在不同服务器上通过php文件代理调用来连接到rest API。
所以我的私人服务器上有一个proxy.php文件,我称之为:
www.myserver.pl/scripts/proxy.php?url=http%3A%2F%2sponsorserver.hosting.com/api/init.json
(url=URLEncoded address)
它连接(返回HTTP 200),但我还不知道如何将自定义标头传递给init.json脚本;我尝试了通过GET和POST发送它们的所有组合,以及通过GET和POST调用脚本(使用RESTClient FF扩展)。
这是proxy.php:
$getvars = 'myparam1=3;&myparam2=data;'; // for test purposes
$url = $_GET['url'] . '?' . $getvars;
$session = curl_init($url);
curl_setopt($session, CURLOPT_HEADER, true);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec_follow($session);
echo $response;
curl_close($session);
不幸的是我的服务器有base_dir!=''因此我无法设置CURLOPT_FOLLOWLOCATION并使用curl_exec,因此curl_exec_follow(取自此SO答案:https://stackoverflow.com/a/10835824/2492808)。这可能是为什么init.json没有获取GET变量的原因?它说它没有看到myparam1和myparam2。不幸的是我无法在我的服务器上更改php.ini,并且需要一种方法使其工作,以便我可以从我的IDE集成和测试赞助商的其余API。谢谢!
编辑:这是愚蠢的,它不是我想发送给赞助商脚本的GET变量,而是http标头。所以我删除了$ getvars并添加了:
curl_setopt ($session, CURLOPT_HTTPHEADER, Array('myparam1=3','myparam2=data'));
在curl_exec_follow之前和内部,在每次新的curl_exec调用之前,理论上应该设置标头并使它们通过。不幸的是,脚本仍然看不到标题:(
另外,根据php manual,我尝试通过在.myserver.pl/scripts /中添加.htaccess来删除base_opendir限制:
<IfModule mod_php5.c>
php_value open_basedir ""
</IfModule>
但它没有改变任何东西,可能我没有
“AllowOverride Options”或“AllowOverride All”权限
所以CURLOPT_FOLLOWLOCATION仍然是非法的。
答案 0 :(得分:0)
这些天没用的借口了。购买亚马逊云托管的每月15美元的服务器。花费15美元比花一个小时编写代码以解决容易解决的问题更容易。你可能在共享主机方案上花了10美元。不幸的是我无法在我的服务器上更改php.ini,并且需要一种方法使其工作,以便我可以从我的IDE集成和测试赞助商的其余API。谢谢!