如何使用CURL将XML作为表单字段发送

时间:2018-08-01 16:31:17

标签: xml bash curl

我正在尝试发布到url,发送表单数据,并且这些字段之一采用XML。问题在于,当执行此命令时,将执行XML中的第一个“ <”以重定向命令的输出,而不仅仅是将其用作纯文本字符串。如何在bash脚本中发送它?

这是我的sendcurl.sh的相关部分:

istreambuf_iterator<int>

我尝试在$ tags中使用几个不同的值,但是输出始终相同:

tags='<Tagging><TagSet><Tag><Key>TagName</Key><Value>TagValue</Value></Tag></TagSet></Tagging>'
curl   -x http://localhost:8080                         \
    -# -k                       \
    -F key=$targfile            \
    -F acl=$acl                 \
    $key_and_sig_args           \
    -F tagging=$tags  \
    -F "Policy=$p"              \
    -F "Content-MD5=$md5"       \
    -F "Content-Type=$mime"     \
    -F "file=@$srcfile"         \
    https://${bucket}.s3.amazonaws.com/

关于如何将其作为表单字段传递的任何想法?

1 个答案:

答案 0 :(得分:0)

您的-F选项都没有被双引号引起,这是建议的做法。通常,这不会有问题,但是如果字符串中的字符可能会被shell误解(例如空格,小于或大于符号等),那么您将遇到问题。

在这种情况下,您只需要更改以下行:

   -F tagging=$tags

对此:

   -F tagging=\"$tags\"

请注意,您必须对双引号进行转义,因此外壳程序将允许双引号不进行分析。

执行以下操作后,curl命令的相关部分如下所示:

 -F tagging="<Tagging><TagSet><Tag><Key>TagName</Key><Value>TagValue</Value></Tag></TagSet></Tagging>"