【问题标题】:Curl Request damages XML Post Data卷曲请求损坏 XML Post 数据
【发布时间】: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));我仍然想了解这里发生了什么。这很奇怪。

标签: php xml curl


【解决方案1】:

这更像是一个评论而不是一个具体的解决方案,但我会考虑使用数组方法而不是自己编码:

您不需要自己对后期数据进行编码。可以直接使用数组,see:

CURLOPT_POSTFIELDS 要在 HTTP“POST”操作中发布的完整数据。 [...] 此参数可以作为 urlencoded 字符串传递,例如 'para1=val1&para2=val2&...' *或作为字段名称作为键、字段数据作为值的数组。如果 value 是一个数组,则 Content-Type 标头将设置为 multipart/form-data。

【讨论】:

    猜你喜欢
    • 2018-09-20
    • 2019-03-31
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2017-04-13
    • 2015-10-27
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多