【问题标题】:Unable to insert a newline or carriage return in xml document无法在 xml 文档中插入换行符或回车符
【发布时间】:2015-01-25 09:31:47
【问题描述】:

我正在使用 curl 执行 PUT 请求,如下所示:

curl --user admin:pass -H "Content-Type: application/xml" -d 
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<disabled>false</disabled>
<local>true</local>
<publicKey>publickeywithnewlines</publicKey>
<userType>STANDARD</userType>
<username>testuser1212</username>
<password>pass</password>
</user>' 
-X POST http://www.dummyaddress.com/api/members/

我需要在 publickey 标记中包含的文本末尾插入新行和回车。我尝试过使用标签
换行符,例如 但似乎没有任何效果。我已阅读有关 -data-binary 的信息,但不知道如何在此处应用它。任何帮助将不胜感激。

我尝试将内容放入如下文件中: 错误的 真的 Tootsie 卷提拉米苏马卡龙威化胡萝卜蛋糕\n\n\n\n 标准 简单用户77786 经过 但 curl 命令似乎没有正确退出。就好像命令还没有执行完。

这是 curl --user admin:pass -H 'Content-Type: application/xml' --data-binary '@template.xml' -X POST http://www.dummyaddress.com/api/users/

【问题讨论】:

    标签: xml post curl newline


    【解决方案1】:

    这是我刚刚尝试过的东西,也许它可以帮助您了解发生了什么。

    将您的 POST 数据放入一个文件中(比如post.xml),并相应地对其进行编辑。我刚刚在此处复制/粘贴了您的初始示例:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <user>
    <disabled>false</disabled>
    <local>true</local>
    <publicKey>publickeywithnewlines</publicKey>
    <userType>STANDARD</userType>
    <username>testuser1212</username>
    <password>pass</password>
    </user>
    

    为了调试,使用nc 设置一个虚拟TCP 服务器,并通过hexdump 管道输出,这样您就可以准确地看到上传到服务器的内容:

    nc -nl -p 8888 | hexdump -C
    

    然后运行:

    curl --user admin:pass -H 'Content-Type: application/xml' \
         --data-binary '@post.xml' -X POST http://127.0.0.1:8888
    

    (前导 @ 指示 curl 从 test.xml 读取 POST 数据,使其更易于编辑/调整)。

    使用--data-binary,您的数据应该原封不动地上传。当然,正确格式化文件取决于您(尤其是关于行尾字符)。这是我在 &lt;publicKey&gt; 元素中放入几个 CR+LF 时得到的摘录:

    ...
    00000110  75 65 3c 2f 6c 6f 63 61  6c 3e 0a 20 20 3c 70 75  |ue</local>.  <pu|
    00000120  62 6c 69 63 4b 65 79 3e  0d 0a 0d 0a 3c 2f 70 75  |blicKey>....</pu|
                                       ^^^^^^^^^^^
    00000130  62 6c 69 63 4b 65 79 3e  0a 20 20 3c 75 73 65 72  |blicKey>.  <user|
    ...
    

    (注意偏移量00000128处的双0d 0a 0d 0a

    根据您的确切要求编辑post.xml,然后当您对结果满意时,只需在curl 命令行上更改目标网址。

    注意:您还应该将原始 CR 和 LF 替换为适当的 XML 实体:分别为 &amp;#x0d;&amp;#x0a;

    【讨论】:

    • 我会试试的,谢谢。作为我自己的参考,你用什么来创建文件中的 CR + LF?所以我知道什么对你有用。
    • 我帖子中的 hexdump 是使用原始 LF 生成的(^v^m 和 vi)。
    • 不幸的是,这没有奏效。我的密钥被发送到一个检查其有效性的休息端点(没有尾随的新行或回车),但它没有用它注册它们。
    • 也许他们也在使用其他验证方法(cookie 等)。抱歉,我帮不上忙。
    • 最后一件事我在尝试对 nc 执行命令时收到拒绝访问错误,你是如何确定地址的
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2017-06-28
    • 2013-04-15
    • 2010-12-07
    • 2023-02-21
    • 1970-01-01
    相关资源
    最近更新 更多