【发布时间】:2011-12-08 07:36:51
【问题描述】:
我将 XML 数据作为带有 curl 的 POST 请求发送到服务器,如下所示:
// $params contains xslt="<xml version ...."
$url = get_cfg_var('Http_Host') . "/webservice/update.php?";
$strParameters = http_build_query($params);
$ch = curl_init($url);
// Set options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $strParameters);
$data = curl_exec($ch);
现在当我在 webserive/update.php 中获取数据时
$_REQUEST['xslt'] 仅包含来自 xml 的一些叶子数据,其中大部分标签都像这样被剥离 [但有很多新行]
USD
,
.
0
5
我不知道发生了什么。这是一些双重编码问题吗?
strParameters 确实包含 form-urlencoded 格式的正确数据 [+ 表示空格等]
在将其发送到 curl 之前,我尝试了 urldecode。但它仍然没有解决问题。
【问题讨论】:
-
如果您在浏览器中查看该数据,我会说:难怪。它是 XML,浏览器会隐藏它不知道的所有标签。在这种情况下,您可能正在寻找
htmlspecialchars。 -
不 - 我没有在浏览器中查看该数据。我只是将 _REQUEST['xslt'] 转储到服务器端的文件中。
-
我没有在您的代码中看到错误。方法看起来不错。您的服务器可能更改数据。您可以尝试对数据进行base64编码并再次在脚本中对其进行解码,然后检查它是否通过。
-
您是否能够使用数据包嗅探器或其他类似工具来查看在服务器收到请求之前在网络上的样子?
-
@hakre - 是的,这正是我现在所做的[并且它有效]。 $params['xslt']=base64_encode(gzcompress($params['xslt'], 9));我仍然想了解这里发生了什么。这很奇怪。