“伪造”(=嘲弄)AMFPHP远程处理请求

时间:2009-12-26 12:42:03

标签: php mocking amf amfphp

我正在使用AMFPHP取得巨大​​成功,将我的数据库与我的Flex应用程序链接起来。但是我希望能够通过输入类似以下内容来测试flash之外的远程处理请求:

http://localhost/amfphp/gateway.php?[WHAT我在这里投下]

为了让浏览器(或C ++ http组件)调用amfphp服务,我在问号后面放了什么,以便http请求不需要从flash“启动”。

4 个答案:

答案 0 :(得分:5)

听起来你想用PHP进行AMF调用。您不能直接从浏览器执行此操作。数据将以二进制AMF格式返回,当然PHP或浏览器无法直接处理。我甚至认为它不能提出要求。

你需要一个AMF客户端来进行调用和解码数据 - 我建议使用SabreAMF。

Sabre AMF homepage

这就是简单的客户端方法调用代码。

require 'SabreAMF/Client.php';

function make_request($param1,$param2){
$client = new SabreAMF_Client('http://your.server/amfphp/gateway.php'); 
return $client->sendRequest('your_amf_service.yourAMFmethod',array($param1, $param2));
}

然后你调用这个

$result=make_request('cow',300);

并返回一个数组。

您可能想要使用所有方法设置PHP类,以便您可以轻松地调用每个方法。

答案 1 :(得分:1)

AMFPHP拥有service browser,可让您模拟对服务器端服务的调用并查看响应。它基本上将内部CURL请求返回到相同的服务文件并传递您提供的参数,并且就像直接从客户端Flash应用程序完成一样。

答案 2 :(得分:0)

AMF being a binary format,事情可能不会那么简单:你必须找出你的数据是如何编码的......

作为第一步,也许您可​​以从gateway.php脚本中将收到的所有内容转储到文件中,当它从您的Flash组件调用时?

通过这种方式,您可以看到接收到的数据是如何显示的(并且您知道它是在POST中传递还是在GET中传递)。

根据数据的样子,也许您可​​以“伪造”到您服务器的请求 - 但我认为它不会像从您的浏览器调用URL那么简单。

答案 3 :(得分:0)

考虑到AMFPHP网关只是一种机制(从/到二进制)和调度到具有各种传入参数的类/方法,最后是数据的return() - 你可以直接对方法进行单元测试,因此跳过整个AMF层?