1

我正在编写 ActionScript3 flash 游戏,它需要访问赞助商(游戏购买者)指定的 REST 服务——比如高分等。我知道如何使用 URLLoader、URLRequest、设置 URLRequestHeader。

不幸的是,赞助商在共享主机上,不能将 crossdomain.xml 放在服务器根目录中,所以我无法从我的 localhost flash 游戏(同源策略)连接到它。我了解到有一种方法可以通过不同服务器上的 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 集成和测试赞助商的 rest API。谢谢!

编辑:这很愚蠢,我想发送给赞助商脚本的不是 GET 变量,而是 http 标头。所以我删除了 $getvars 并添加了:

curl_setopt ($session, CURLOPT_HTTPHEADER, Array('myparam1=3','myparam2=data'));

在 curl_exec_follow 和内部之前,在每个新的 curl_exec 调用之前,理论上应该设置标题并使其通过。不幸的是,脚本仍然看不到标题:(

此外,根据php 手册,我尝试通过将 .htaccess 放入 www.myserver.pl/scripts/ 来删除 base_opendir 限制:

<IfModule mod_php5.c>
  php_value open_basedir ""
</IfModule>

但这并没有改变任何东西,可能我没有

“AllowOverride Options”或“AllowOverride All”权限这样做

所以 CURLOPT_FOLLOWLOCATION 仍然是非法的。

4

1 回答 1

0

不幸的是,我无法更改服务器上的 php.ini,并且需要一种使其正常工作的方法,以便我可以从我的 IDE 集成和测试赞助商的 rest API。谢谢!

这些天没有用的借口。购买托管在亚马逊云上的每月 15 美元的服务器。花 15 美元比花一个小时为一个容易解决的问题编写代码更容易。无论如何,您可能在共享托管计划上花费了 10 美元。

于 2013-07-10T23:10:07.707 回答