来自终端的卷曲-d命令

时间:2013-02-05 20:01:19

标签: xml curl

我有一个关于卷曲的具体问题。我想调用我的xml页面,我正在从终端执行类似的操作:

curl -d @<xml page> <url> 

然而,当我执行以下命令时,我得到以下内容:

Invalid request structure

在我的xml页面中,请求如下:

<example type="request">
            <doLogin>
                    <userName>my_username</userName>
                    <password>my_password</password>
                    <...other details>
            </doLogin>
</example>

如何在curl命令中传递用户名和密码的参数?

2 个答案:

答案 0 :(得分:4)

如果您想发布XML文件,请尝试执行以下操作:

curl -d "@./file.xml" -X POST -H 'Content-Type:text/xml' http://domain.tld/path

如果用户名/密码由 basic auth 处理,请尝试使用 unix shell 执行此操作:

user=$(xmllint --xpath '/example/doLogin/userName/text()' file.xml)
pass=$(xmllint --xpath '/example/doLogin/password/text()' file.xml)
curl -u "$user:$pass" http://domain.tld/path

XML档案:

<?xml version="1.0" encoding="utf-8"?>
<example type="request">
            <doLogin>
                    <userName>my_username</userName>
                    <password>my_password</password>
                    <...other details>
            </doLogin>
</example>

答案 1 :(得分:0)

您是否在询问如何使用POST发送该XML文件,然后在该XML中使用您的自定义用户和密码,所有这些都来自一个命令行?

如果是这样,那么通过sed管道模板XML文件以使其填写正确的值可能是一个想法,然后让curl读取文件以从其stdin发布。

  

$ sed -e“s / my_username / $ user / g”-e“s / my_password / $ password / g”&lt; template_file | curl -d @ - [URL]