【发布时间】:2011-08-18 09:18:37
【问题描述】:
在这里问这个问题是因为在 CakePHP 谷歌组没有得到答案。我有以下管道: 有一个基于 CakePHP 的应用程序。它有一个带有名为 save_results 的操作的控制器。 该操作是一个接受 3 个参数的方法。所以它看起来像这样:
function save_results($data,$rawdataset,$status){
///stub///
return "all the data received";
}
除了 CakePHP 应用程序之外,我还有一个 WebOrb(PHP),我使用它来使用 AMF 格式与 Flash 应用程序通信。Flash 应用程序将数据发送到 WebOrb 服务,然后将其发送到我在 Cake 中描述的操作。所以我从Flash 应用程序 3 对象以匹配我传递给 cake 方法 (save_results) 的参数: 数据类型的对象数组。 rawdataset-of 类型的字符串,包含 xml 对象。 状态无符号整数 0 或 1。 在 WebOrb 服务中,从 Flash 接收到的数据是正常的。但是当我尝试将其进一步发送到 CakePHP 时,它并没有通过。 我是这样做的(在 WebOrb 类中):
public function sendToCake($data,$rawdataset,$status){
$encodedData=urlencode($data);
$encodedRawData=urlencode($rawdataset);
$destinationURL="http://localhost/mycakeapp/resultscontroller/save_results /".$encodedData."/". $encodedRawData."/".$status;
return file_get_contents( $destinationURL);
}
我发现传递给 cake 的 url 的参数不能在字符之间有空格。所以我使用 urlencode()。它适用于像“Hello world”这样的简单字符串。但是一旦我传递了更复杂的字符串,比如 xml 字符串 ($ rawdataset 对象)蛋糕没有收到这样的调用。我也尝试了 rawurlencode() 并且仍然没有结果。当通过 http 调用传递时,蛋糕是否可能不知道如何处理 xml 结构化字符串?对此问题的任何帮助或建议将不胜感激。
【问题讨论】:
-
你能提供一个示例 $rawdataset - 编码和原样吗?您可能需要更改为 POST/GET 请求。
-
$rawdataset -未编码-: "
\n \n" -
这是 urlencoded 版本:%22%3CcptERF+id%3D%5C%22mainXml%5C%22+label%3D%5C%22mainXML%5C%22+topERFt%3D%5C%220 %5C%22+topGERF%3D%5C%220.000%5C%22+topET%3D%5C%220%5C%22+topTFD%3D%5C%220.000%5C%22+topGDFt%3D%5C%220%5C %22+topGDF%3D%5C%220.000%5C%22+topGHDFG%3D%5C%220%5C%22+topERD%3D%5C%220.000%5C%22+ ...等...我更改了一些键该信息的名称是保密的。谢谢。
-
不确定为什么会失败,但通过 URL 传递的参数可能会受到限制(防止注入等)。我将在下面输入答案。
-
这就是让我抓狂的原因。它应该可以工作!我也一直认为它与某些安全性有关。(可能应该是路由设置?)