【问题标题】:Dump POST data to XML using php使用 php 将 POST 数据转储到 XML
【发布时间】:2014-02-06 18:54:35
【问题描述】:

我维护了一个网店,可以生成其订单的 xml 文件。应该使用 http-POST 将这些订单推送到履行中心的 URL。

我们为此构建了一个脚本,并针对履行中心的 URL 对其进行了测试,它似乎可以工作,但由于我们无法继续针对该 URL 进行测试(因为 FFC 会认为它是真实订单)我想做我自己的测试环境。我是否可以将使用 POST 发送的内容再次转储到每个订单的一个 .xml 中。

为此,我尝试了几个脚本,包括 Dump XML Posts from 'php://input' to file,但它们似乎都不起作用。转储到 TXT 也可以用于测试目的。

你们中有人知道我能做什么吗?

【问题讨论】:

    标签: php xml http post


    【解决方案1】:
    $xml = new SimpleXMLElement('<root/>');
    array_walk_recursive($_POST, array ($xml, 'addChild'));
    print $xml->asXML();
    

    【讨论】:

    • 试过这个,但不幸的是没有响应也没有错误:(
    【解决方案2】:

    如果 $_POST 具有单维数组,请尝试这个简单的数组到 xml 的转换。

    $post_arr = $_POST;
    $xml = new SimpleXMLElement('<root/>');
    array_walk_recursive($post_arr , array ($xml, 'addChild'));
    print $xml->asXML();
    

    对于多维数组:参考这个 SO 答案:

    https://stackoverflow.com/a/19051521/270037

    【讨论】:

    • 我使用了这段代码并在return $dom-&gt;saveXML();之后添加了$handle = fopen("yourxmlfile.xml", "w");fwrite($handle, $strxml);fclose($handle);,这不会创建文件。对此原因有什么想法吗? (文件夹权限为777)
    • 我不能再编辑了,所以我正在使用它。忘记指定我使用了您链接到的多维数组脚本,因为输入是多维的。
    • 不,我没有(检查日志文件等)。不过我不确定$node_name="root"。创建 .txt 文件 (stackoverflow.com/posts/21186608/revisions) 的脚本有效,但编码错误。所以至少我确定 POST 部分有效。
    【解决方案3】:

    您可以使用浏览器的扩展程序 对于火狐,HTTP Resource Test

    我误解了这个问题

    你也可以这样做,imo更简单 它会将内容附加到 txt 文件中

    function debug($content){
    $fh = fopen("postrequest.txt", 'a') or die("can't open file");
    fwrite($fh, $content."\n");
    fclose($fh);
    }
    $input = file_get_contents("php://input");
    debug($input);
    

    【讨论】:

    • 感谢您的回答!但是,它似乎并没有真正帮助我。自动脚本将 POST 推送到指定的 URL,我需要能够看到输出,因此我需要一个脚本来转储 POST 中的内容。
    • 啊,谢谢。这行得通,我绝对可以用它来测试脚本!我仍然会遵循其他给定的解决方案,因为那会更加完美。另外,很遗憾,我的名声太低了,我无法投票支持您的帖子...
    • 有一个问题,编码并不完全正确。您是否知道任何解决方案(也许只是在头部说明编码?)?我收到类似payment%3E%0A++++++%3Cmethod%3Em2epropayment%3C%2Fmethod%3E%0A++++%3C%2Fpayment%3E%0A++%3C%2Forder%3E%0A%3C%2Fordercollection%3E%0A
    • 抓取调试,将其替换为$xml = urldecode($input); 并更改顺序(首先是 php://input,然后是 bij urldecode 并以 fopen-fwrite-fclose 结尾)。这个解决方案是由stackoverflow.com/users/1792799/vic-degraeve 提供给我的
    【解决方案4】:

    感谢 SO-UserVic Degraeve 解决。

    $input = file_get_contents("php://input");
    $xml = urldecode($input);
    $fh = fopen(time() . ".xml", 'a') or die ("Can't create file!");
    fwrite($fh, $xml);
    fclose($fh);
    

    【讨论】:

    • 这也可以,但请记住,fopen 中的 'a' 会将内容附加到具有相同名称的文件中。最后,您必须废弃文件以了解一个请求在哪里结束,而另一个请求从哪里开始
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多